我要做的是找出交替数的计数,这样它与-ve交替,并且正符号为例如:1 -2,3 -4将得到从1到-4之间的4,3,2,1,包括有4个数字的两个数字。同样的,对于11-3 2可以得到1 3 2 1,现在我有了代码,但是我不能优化它,它会返回一个超过错误的时间限制,即使它适用于中等输入流。
这里,交替的方法,如第一个数是正数,第二个数是负数,下一个数是正数,等等。所以,如果输入是1-2-3-4,那么从数字1到最大,我可以移动到-4,这样就有一个交替的序列。所以计数=3 +数字本身,也就是-2,如果我从-2出发,我可以走到- 4,因为它从负的、正的和负的交替。所以又是两个数字+1=3。类似地,对于r=each位置,我得到它为4,3,2。现在,假设数是1 -3 2,那么就没有1的数字,可以立即找到下一个交替数。
因此,对于1,1 -3,2,1,由于没有直接的-ve数,它是1,对于第二个1,我可以遍历到a -3和2 i.2,也就是说,count=2+1=3.For -3,我只找到一个2,所以计数是1+1=2.For,最后一个数是1,所以答案是1,3,2,1
样本输入:1 -2 1 -3 2
产出:4 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
发布于 2017-10-09 11:02:54
你确定你应该打印最终答案的中间结果吗?如果最终值已满,则在内循环和算法复杂度变为O(N)之后,没有理由返回到初始j
:
j = 0
max = 0
length = (raw_input())
st = map(int,raw_input().split())
while j+1 < len(st):
k = j + 1
count = 1
while k<len(st) and ((st[k]<0 and st[k-1]>0) or (st[k]>0 and st[k-1]<0)):
count += 1
k += 1
j += 1
for c in range(1, count+1)[::-1] :
print c
j += 1
https://codereview.stackexchange.com/questions/177508
复制相似问题