0
我試圖想到一個高效的算法,解決了以下問題:查找數組,等於剩餘的元素的總和元素
鑑於整數數組,返回元素的索引該數組等於數組中其餘元素的總和;如果不存在這樣的元素,則返回-1。
例如,給定的[1,2,3,6]
陣列,然後返回4,因爲給定的6=1+2+3;
[3, -3, 5, 1]
,由於3 = -3 + 5 + 1
返回0。
有什麼想法?
我試圖想到一個高效的算法,解決了以下問題:查找數組,等於剩餘的元素的總和元素
鑑於整數數組,返回元素的索引該數組等於數組中其餘元素的總和;如果不存在這樣的元素,則返回-1。
例如,給定的[1,2,3,6]
陣列,然後返回4,因爲給定的6=1+2+3;
[3, -3, 5, 1]
,由於3 = -3 + 5 + 1
返回0。
有什麼想法?
在兩個運行解決這個問題:
i
,arrSum == i * 2
是否持有 - 等同於arrSum - i == i
。如果它成立,你已經找到了你的搜索元素。在代碼:
int sum = 0;
for(int i : arr)
sum += i;
for(int i = 0 ; i < arr.length ; i++)
if(sum == arr[i] * 2)
return i;
return -1;
在奔跑O(n)
。
我沒有看到* 2部分。那完成了什麼? –
@BarryTheHatchet在第二個項目符號中解釋過,這只是另一種說'arrSum - i == i'的方式,但其優點是隻有一個數組讀取發生。只是一點優化。 '* 2'可以通過位移優化,但是我忽略了這一點。 – Paul
我還是不明白'arrSum - i'表示「數組中剩餘元素的總和」。 –