gpt4 book ai didi

c++ - 以数学方式旋转有序数数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:16 26 4
gpt4 key购买 nike

假设您在给定域中有一组数字,例如:[-4,4]

还假设这组数字在一个数组中,并且按数字顺序,如下所示:

[-4, -3 -2, -1, 0, 1, 2, 3, 4]

现在假设我想为这组数字创建一个新的零点,如下所示:(我选择-2 作为我的新轴,并且所有元素都相应地移动)

Original: [-4, -3 -2, -1, 0, 1, 2, 3, 4]

Zeroed: [-2, -1 0, 1, 2, 3, 4, -4, -3]

有了新的归零数组,假设我有一个函数叫做:

"int getElementRelativeToZeroPosition(int zeroPos, int valueFromOriginalArray, int startDomain, int endDomain) {...}"

使用示例:

I am given 3 of the original array, and would like to see where it mapped to on the zeroed array, with the zero on -2.

getElementRelativeToZeroPosition(-2, 3, -4, 4) = -4

无需创建任何数组并为此映射移动元素,我如何数学上产生上述函数的预期结果?

最佳答案

我会这样进行:

  1. 获取原始零位索引
  2. 获取新零位置的索引(即在您的示例中为 -2 的索引)
  3. 获取搜索位置的索引(索引为3)
  4. 计算新零位置和原始零位置之间的移动 vector
  5. 将移动 vector 应用到搜索位置取模数组大小以执行旋转

如果您的数组是从零开始的:

index(0) => 4
index(-2) => 2
index(3) => 7
array_size => 9

move_vector => index(0) - index(-2)
=> 4 - 2 => +2

new_pos(3) => (index(3) + move_vector) modulo array_size
=> (7 + 2) mod 9 => 0

value_at(0) => -4

就是这样

关于c++ - 以数学方式旋转有序数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37682309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com