You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归算法求解旋转滑块数组偏移量匹配参考数组值问题

首先很抱歉我暂时想不到更合适的名称来描述这个练习题/问题。
我已经完成了基础解法,但我认为方案还有很大的优化空间,各位技术爱好者能力出众且热爱挑战,肯定能给出比我的实现更优的方案。

具体问题

给定任意长度的整数数组 valuesToMatch,示例如下:

const valuesToMatch = [-1, -1, 4, -1, 4]

另有二维整数数组 rotatingSliders,其内部所有子数组长度相同,且每个子数组长度大于等于 valuesToMatch 的长度,示例如下:

const rotatingSliders = [
      [0, 0, 0, 1, 0, 3],
      [0, 3, 0, 1, 0, 0]
 ]

需求目标

为 rotatingSliders 中的每一个子数组找到正确的索引偏移量,使得所有子数组对齐后,相同索引位置的元素之和等于 valuesToMatch 对应位置的数值。
valuesToMatch 中的-1代表不需要校验该位置的匹配结果。
最终返回二维结果数组 offsets,包含所有符合要求的偏移量组合,无符合条件的结果则返回空数组。
以上述数组为例,唯一正确的解为:

offsets = [ [-1, 1] ]

对齐逻辑说明

要对齐以下三个数组:

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

需要将 rotatingSliders 的第一个子数组偏移-1,第二个子数组偏移+1:

|       |
    [-1, -1,  4, -1,  4]
[ 0,  0,  0,  1,  0,  3] // offset -1
        [ 0,  3,  0,  1,  0,  0] // offset +1

此时可验证匹配关系:

valuesToMatch[3] == 4 && valuesToMatch[5] == 4

rotatingSliders[0][3] + rotatingSliders[1][1] = 1 + 3 = 4

rotatingSliders[0][5] + rotatingSliders[1][3] = 3 + 1 = 4

注意:rotatingSliders 中的子数组为循环旋转,偏移后超出数组边界的元素会从数组另一端移入。

offset -1代表数组整体左移1位
[ 0,  0,  0,  1,  0,  3] // 原数组
[ 0,  0,  1,  0,  3,  0] // 偏移-1后

偏移+1代表数组整体右移1位
[ 0,  3,  0,  1,  0,  0] // 原数组
[ 0,  0,  3,  0,  1,  0] // 偏移+1后

规则说明

rotatingSliders 所有子数组长度 >= valuesToMatch 长度

该规则是为了确保所有旋转后的滑块子数组始终有元素与 valuesToMatch 对齐。
希望大家能享受这个小挑战:)

内容的提问来源于stack exchange,提问作者renscrab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:21:03