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

JavaScript求数组中和为目标值的不重复整数对问题求助

问题分析与代码修正

原代码存在几个关键问题,导致无法输出正确结果:

  • 内层循环边界错误:j < arr.length - 1 会跳过数组最后一个元素,应该改为 j < arr.length,才能遍历到所有后续元素。
  • 结果存储格式错误:arr1.unshift(arr[i], arr[j]) 把两个数直接塞进一维数组,而非将每对作为独立子数组存储,应该用 arr1.push([arr[i], arr[j]]) 生成二维结构。
  • 返回值包装错误:new Array(arr1) 会把整个结果数组当作单个元素嵌套,直接返回处理后的数组即可。
  • 缺少排序与去重逻辑:题目要求返回不重复且升序排列的二维数组,需要对每个子数组内部排序、去重,最后对整个二维数组按升序排列。

修正后的代码

function findPairs(arr, target) {
  const pairs = [];
  // 遍历所有不重复的元素对
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] + arr[j] === target) {
        // 对每对元素排序,保证内部升序
        const sortedPair = [arr[i], arr[j]].sort((a, b) => a - b);
        pairs.push(sortedPair);
      }
    }
  }
  // 去重:将子数组转为字符串,利用Set唯一性去重后转回数组
  const uniquePairs = [...new Set(pairs.map(pair => JSON.stringify(pair)))].map(pair => JSON.parse(pair));
  // 对整个二维数组按升序排列
  return uniquePairs.sort((a, b) => a[0] - b[0]);
}

console.log(findPairs([3, 7, 8, 4, 5, 9], 12)); // [[3,9],[4,8],[5,7]]
console.log(findPairs([1, 2, 3, 4], 8)); // []

补充说明

  • 去重逻辑通过将子数组转为JSON字符串,利用Set的唯一性特性实现,再转回数组结构。
  • 两次排序:先保证每个数对内的元素升序,再对整个结果数组按子数组第一个元素排序,完全匹配题目要求的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:22:06