【问题标题】:How to check if values at even and odd positions (within an array) are the same?如何检查偶数和奇数位置(数组内)的值是否相同?
【发布时间】:2016-01-28 19:10:18
【问题描述】:

假设我有一个大小在 700.000 到 800.000 之间的数组,我需要对其进行迭代以完成一些奇特的任务。

对于“相同的偶数和奇数位置”我的意思是:

[0,0,1,1,2,2,3,3] // even and odd are the same

[0,1,1,1,2,2,3,3] // even and odd are not the same (arr[0] and arr[1] are differents)

[0,0,1,1,2,2,3] // even and odd are not the same (last value missing)

如果偶数和奇数位置的值相同,我需要将此函数应用于每个值:

transition_left_right << i*@maxS

如果偶数和奇数不同,我必须将此函数应用于每个偶数值:

transition_left << i*@maxE

这对每个奇数值:

transition_right << i*@maxO

最快的方法是什么? (无需多次迭代巨大的数组)。最好是 1 次迭代...

【问题讨论】:

  • “偶数和奇数”是什么意思?你的意思是arr[0]等于arr[1]arr[2]等于arr[3],等等,还是你的意思是别的?请编辑您的问题以包含示例输入和预期输出。
  • @Jordan:已编辑。希望问题更清楚。是的,我的意思是你写的
  • 你的问题还是有点不清楚。你是指这些中的哪一个? A. 如果 any 偶数-奇数对不相等,则将第二个函数应用于 所有 个偶数值,将第三个函数应用于 所有 个奇数值,并且否则将第一个函数应用于 all 值;或 B. 对于所有奇偶对,如果给定的奇偶对不相等,则仅将第二个函数应用于该偶数值,将第三个函数应用于该奇数值,否则将第一个函数应用于该偶数值,并且只有奇数?
  • 如果只有一对不同,适用于两个不同的功能!

标签: arrays ruby algorithm


【解决方案1】:

试试这个。

# odd/even always the same?
[1,1,2,2,3].each_slice(2).all? { |a,b| a == b }
#=> false

# hope I got your explaination right
@maxO, @maxE = 2, 3
[1,1,2,2,3].each_slice(2).flat_map do |odd,even|
  odd == even ? [odd,even] : [odd*@maxO, even && even*@maxE]
end.compact
#=> [1, 1, 2, 2, 6]

【讨论】:

    【解决方案2】:

    正如@sschmeck 的回答所示,Enumerable#each_slice 是要走的路。我假设transition_left_righttransition_lefttransition_right@maxS@maxO@maxE 是已经存在的变量,而i 是数组中的偶数或奇数值。

    如果是这样的话,那么我想你想要这个:

    result = arr.each_slice(2) do |left, right|
      if left == right
        transition_left_right << left * @maxS
        transition_left_right << right * @maxS
      else
        transition_left << left * @maxE
        transition_right << right * @maxO unless right.nil?
      end
    end
    

    【讨论】:

    • 没有。在迭代过程中,@maxS@maxO@maxE 由于当前步骤而得到不同的值。
    • 嗯,如何将这些计算添加到上面的代码中应该很明显了。
    猜你喜欢
    • 2014-03-04
    • 2023-04-11
    • 2021-05-13
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多