給定N個正整數的數組。它可以有n*(n+1)/2
子數組,包括單個元素子數組。每個子陣列有一個總和S
。對於所有的子陣列,查找S's
顯然是O(n^2)
,因爲子陣列的數量是O(n^2)
。許多和也可以重複。有沒有什麼辦法可以找到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]
。
所以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