N 개의 양의 정수 배열을 감안할 때. 단일 요소 하위 배열을 포함하여 n*(n+1)/2
개의 하위 배열을 가질 수 있습니다. 각 하위 배열의 합은 S
입니다. 모든 하위 배열에 대해 S's
을 찾으려면 서브 배열의 수가 O(n^2)
이므로 분명히 O(n^2)
입니다. 많은 금액의 S's
도 반복 될 수 있습니다. O(n logn)
에서 모든 고유 한 합계 (합계의 정확한 값이 아니라 단지 계수)를 찾을 수있는 방법이 있습니까?정수 배열에서 하위 배열 합계를 찾습니다.
나는 접근을 시도했지만 방해가되지 않았습니다. 인덱스 1에서 n으로 배열을 반복했습니다.
라고 말하면 a[i]
이 주어진 배열입니다. 각 색인 i
에 대해 a[i]
은 a[i-1]
이 포함 된 모든 합계에 추가되며 개별 요소로도 포함됩니다. 그러나 a[i-1]
이 포함 된 합계 중 두 합계의 차가 a[i]
이면 중복이 나타납니다. 제 말은 합계가 Sp
과 Sq
으로 끝나면 a[i-1]
이되고 두 가지의 차이는 a[i]
이됩니다. 그런 다음 Sp + a[i]
은 Sq
과 같으며 Sq
을 중복하여 표시합니다.
라고 말하면 C[i]
은 a[i]
에 끝나는 별개의 합계입니다.
so C[i] = C[i-1] + 1 - numbers of pairs of sums in which a[i-1] is involved whose difference is a[i]
.
그러나 문제는 쌍의 수의 부분을 O(log n)
에 찾는 것입니다. 제발 나에게 이것에 대한 힌트를 주거나 내가 잘못한 길로 완전히 다른 접근법이 요구된다면 그것을 지적 해주십시오.
글쎄, 그것은 흥미로운 문제입니다.내가 생각할 모든 것은 O (n^2) 인 입력 요소의 모든 쌍을 고려해야 할 가능성이 있습니다. 내 직감은 불가능하다고 말한다. – user2357112
나는 O (n logn)이 존재한다는 문제를 저에게 준 사람에게 확신을 가지고 있습니다. 나는 하루 종일 생각을했다. – user2011120
내일 아직도 고생하고 있다면 시간을 벌 수있는 데모를 요청하십시오. 그래서 그가 당신을 혼란스럽게하지 않는다는 것을 알 수 있습니다. – user2357112