2017-10-09 2 views
-1

그래서 내가하려고하는 것은 -ve와 양수 기호가 번갈아 가며 번갈아 가며 카운트를 찾는 것입니다. 예를 들면 다음과 같습니다. 1 -2 3 -4 나를 얻을 수 있습니다. 4 3 2 1 1에서 -4까지 두 숫자를 포함하여 4 개의 숫자가 있습니다. Simillarly for 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 
+1

귀하의 질문 오프 주제입니다. 하지만 아마도 코드 검토 (https://codereview.stackexchange.com/)에서 시도해보십시오. –

+0

다른 숫자의 수를 얻으려면 세트에 모두 추가하고 세트 길이를 얻으십시오 –

+4

이것은 https에 속합니다 : //codereview.stackexchange.com – Torxed

답변

0

봅니다 :

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) 
내가 시도 할 것 617,451,515,

마지막 것은 그들이 시그마는 하나의 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) 
+0

루프에서'len (st) - 1'을 한 번만 계산하면됩니다. – Adirio

+0

고맙습니다. @Adirio. 여전히 복잡성이 줄어들지 않았습니다. 다른 방법이 있습니까? –

+0

몇 가지 옵션을 추가했지만 줄일 수 있는지 확신 할 수 없습니다. 마지막 접근법은 높은 값이 곱하기 위해 더 오래 걸릴 것이므로 실수에 의존합니다. – Adirio