在数组中查找一个等于剩余元素总和的元素

时间:2016-03-20 03:06:27

标签: algorithm

我正在尝试一种解决以下问题的有效算法:

给定一个整数数组,返回数组中元素的索引,该索引等于数组中其余元素的总和;如果不存在这样的元素,则返回-1。

例如,给定数组[1,2,3,6],然后从给定6=1+2+3;的{​​{1}}返回4,从[3, -3, 5, 1]开始返回0。

有什么想法?

1 个答案:

答案 0 :(得分:2)

在两次运行中解决这个问题:

  • 在第一次运行中,创建数组中所有整数的总和
  • 在第二轮中,检查每个元素arrSum == i * 2arrSum - 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)

class Array def each_run uniq.each do |item| yield(item, self.count(item)) end end end 中运行。