所以我要做的是找到交替数字的计数,使其与-ve和正号交替 例如:1 -2 3 -4会得到4 3 2 1从1到-4,包括两个数字,有4个数字。 Simillarly为1 1 -3 2会得到1 3 2 1 现在我有了代码,但我无法对其进行优化,并且即使它适用于中等输入流,也会返回超出时间限制的错误。
j=0
count=0
length=(raw_input())
st=map(int,raw_input().split())
while j+1 < len(st):
k=j+1
count=0
temp=j
while k<len(st) and ((st[k]<0 and st[j]>0) or (st[k]>0 and st[j]<0)):
count+=1
k+=1
j+=1
print count+1,
j=temp+1
print 1
答案 0 :(得分:0)
尝试使用for循环而不是while循环,因为这样可以避免一些变量赋值:
st = map(int, raw_input().split())
length = len(st)-1
for i in range(length):
count = 1
for j in range(i, length):
if (st[j]<0 and st[j+1]>0) or (st[j+1]<0 and st[j]>0):
count += 1
else:
break
print(count)
print(1)
这将给出:
<< 1 -2 3 4
>> 4
>> 3
>> 2
>> 1
<< 1 1 -3 2
>> 1
>> 3
>> 2
>> 1
如果从列表中提取一次而不是两次,也可能会更快一些:
st = map(int, raw_input().split())
length = len(st)-1
for i in range(length):
count = 1
for j in range(i, length):
first, second = st[j:j+2]
if (first<0 and second>0) or (first>0 and second<0):
count += 1
else:
break
print(count)
print(1)
我要尝试的最后一件事是检查他们的sig与单个comparisson不同但我真的不希望它更快:
st = map(int, raw_input().split())
length = len(st)-1
for i in range(length):
count = 1
for j in range(i, length):
product = st[j] * st[j+1]
if product != abs(product):
count += 1
else:
break
print(count)
print(1)