如何根据索引将红宝石数组分为两个数组?

山姆

所以我有一个整数数组。我正在尝试采用该数组并找到一个索引N,其中N左边的整数的总和等于N右边的整数的总和。如果没有索引可以使这种情况发生,请返回-1。

例如:

假设我有一个数组[1,2,3,4,3,2,1]:我希望该方法返回索引3,因为在数组的第3个位置,索引左侧的总和与索引右侧的总和都等于6:

[1,2,3].sum #=> 6
[3,2,1].sum #=> 6

对于数组,[1,100,50,-51,1,1]它应该返回索引1,因为在数组的第1个位置,索引左侧的总和与索引[1].sum右侧的总和[50,-51,1,1].sum都等于1。

最后一个:

[20,10,-80,10,10,15,35]在索引0处有一个数组,左边是[],右边是[10,-80,10,10,15,35]两者相加时等于0。(空数组等于0)。

索引0是左侧和右侧相等的地方。

假设数组都是长度在0到1000之间的整数,并且数字可以是正整数或负整数。

N的左侧等于N的右侧的最​​低索引N。如果它没有适合这些规则的索引,则返回-1。

如果一个数组有多个答案,它将返回最低的正确索引。我是这样开始的,但是我没有尝试给我想要的结果。

def find_even_index(arr)
  if arr.size > 1
    left_side = #some code to get left side #reduce(:+)
    right_side = #some code to get right side #reduce(:+)
    # something that gives index at which sum of left side is the same as right
  elsif
    # more than one result give lowest index
  else
    return -1 
  end
end

谢谢!

帕维尔·米哈伊柳克
def eq_sum_index(arr)
  right_sum = arr.sum
  left_sum = 0
  arr.each_with_index do |e, index|
    right_sum -= e
    return index if left_sum == right_sum
    left_sum += e
  end
  -1
end

eq_sum_index([1, 2, 3, 4, 3, 2, 1])
# => 3
eq_sum_index([1, 100, 50, -51, 1, 1])
# => 1
eq_sum_index([20, 10, -80, 10, 10, 15, 35])
# => 0

解释:

  1. 预先计算右部分总和作为数组的总和。
  2. 迭代数组,每转一圈将元素从右侧部分转移到左侧部分(从右侧减去后再添加到左侧)
  3. 每回合,如果两个和相等,则返回索引。
  4. 如果找不到相等的总和,则返回-1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PHP根据值将数组分为两个数组

如何通过数组键值将数组分为两个数组

我如何将一个数组分为两个具有交替元素的数组

根据复杂的标准将数组分为两个。

红宝石/将数组拆分为列

如何将数组分为int和string数组两个?

如何根据索引php合并两个数组?

Ruby:将数组分为两个数组,并尽可能取平均值

Blade 模板 - 使用 foreach 根据值将数组拆分为两个数组

Objective-C根据偶数/奇数索引将数组拆分为两个单独的数组

将大数组拆分为两个数组

如何使用两个数组分配PHP变量

将数组分为两个子数组,以使数组总和之间的差最小?

根据列名称将矩阵拆分为两个数组

如何基于定界符将数组列表拆分为两个数组列表?

如何将一个数组拆分为两个不同的数组?

将一个数组分成两个数组

使用功能性JavaScript将数组分为两个不同的数组

如何将文本文件拆分为两个数组?

将一个数组分成两个相等大小的数组

在PHP中找到特定索引后如何将数组拆分为两个?

perl 将一个数组拆分为两个数组

根据阈值将数组分成多个数组

将两个数组与索引号组合

java:根据数组的偶数和奇数位置将一个数组拆分为两个单独的数组

如何获得红宝石数组中重复元素的索引

如何获得红宝石中的特定数组索引?

如何将两个数组减少为同一索引中存在的单个值?

如何比较两个数组,然后返回差值的索引?