2016-03-20 17 views
0

aşağıdaki sorunu çözer verimli bir algoritma düşünmeye çalışıyorum:kalan unsurların toplamına eşittir dizideki öğeye bulun

tamsayılar dizisi göz önüne alındığında, öğenin dizinini döndürür dizideki kalan elemanların toplamına eşit olan dizi; Eğer böyle bir eleman yoksa, -1'e geri dönün.

Örneğin, [1,2,3,6] dizisi verilir, sonra, 4 6=1+2+3; yana [3, -3, 5, 1] verilen geri 3 = -3 + 5 + 1 yana 0 döndürür.

Herhangi bir düşünce?

cevap

2

iki çalışır bu çözün:

  • birinci vadede ikinci vadede dizinin
  • tüm sayının toplamını oluşturmak, her bir elemanın i kontrol, arrSum == i * 2 geçerli olup olmadığı - eşdeğer arrSum - i == i için . Eğer tutarsa, aranan öğenizi buldunuz. kodunda

: O(n) yılında

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; 

çalıştırır.

+0

* 2 parçayı alamıyorum. Bu ne yapar? –

+1

@BarryTheHatchet ikinci mermide açıklandığı gibi, bu sadece arrSum - i == i 'demenizin başka bir yoludur, ancak tek bir dizi okunmanın avantajı ile. Sadece biraz optimizasyon. '' 2', bir bit kayması ile optimize edilebilirdi, ama bunu ben yaptım. – Paul

+0

Hala "arrSum - i" dizisindeki kalan elemanların toplamını "anlamıyorum" anlamıyorum. –