在18四数之和的算法题中,使用如下代码
var fourSum = function (nums, target) {
// 定义四个指针k指向数组首位,i指向k后一位,left指向i后一位,right指向数组末尾
// nums[k]+nums[i]+nums[left]+nums[right]=target
let k = 0, i = k + 1, left = i + 1, right = nums.length - 1;
// 定义res数组保存结果集
let res = [];
// 对数组进行排序
nums.sort((a, b) => a - b);
// k指针遍历
for (; k < nums.length; k++) {
// 如果排序后数组第一位就大于target,那就不必继续了,越加越大
if (nums[k] > target && nums[k] > 0 && target > 0) break;
// 对k指针遍历的数组元素去重
if (k > 0 && nums[k] == nums[k - 1]) continue;
// i指针遍历
for (i = k + 1; i < nums.length; i++) {
// 若前两个指针所指向数组元素之和大于target,同理,越加越大不必再加
if (nums[k] + nums[i] > target && nums[k] + nums[i] > 0 && target > 0) break;
// 对i指针遍历的数组元素去重
if (i > 0 && nums[i] == nums[i - 1]) continue;
while (left < right) {
// 左右指针所指向的元素去重
// if(nums[left] == nums[left - 1]) continue;
// if (nums[right] == nums[right + 1]) continue;
const sum = nums[k] + nums[i] + nums[left] + nums[right];
if (sum > target) right--;
if (sum < target) left++;
res.push([nums[k], nums[i], nums[left], nums[right]]);
while (left < right && nums[left] === nums[++left]);
while (left < right && nums[right] === nums[--right]);
}
}
}
return res
};
根据代码注释找出代码中存在什么错误导致没有通过测试用例