We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
原题连接:https://leetcode-cn.com/problems/4sum/
解题思路:
nums[i] === nums[i - 1]
[0,0,0,0] 0
[-5,5,4,-3,0,0,4,-2] 4
[1,-2,-5,-4,-3,3,3,5] -11
/** * @param {number[]} nums * @param {number} target * @return {number[][]} */ var fourSum = function (nums, target) { // 去重时要对比前后两个值是否相等,排序保证对比能正常生效 nums.sort((a, b) => a - b); // 存储结果 let result = []; for (let i = 0; i < nums.length - 3; i++) { // 如果有连续数个值相等,在第一遍循环中,第一个值对应的可能解都已被生成过,之后的值都可以跳过 if (nums[i] === nums[i - 1]) { continue; } // 缓存第一级的target,提供给下一层循环使用 let firstTarget = target - nums[i]; for (let j = i + 1; j < nums.length - 2; j++) { // 如果有连续数个值相等,在当前循环中,先保证第一个值的解会被生成,之后的值都可以跳过 if (j > i + 1 && nums[j] === nums[j - 1]) { continue; } // 缓存第二级的target,提供给下一层循环使用 let secondTarget = firstTarget - nums[j]; // 使用两个指针,分别从数组剩余部分的首尾向中间推进,查找符合条件的结果 let k = j + 1; let l = nums.length - 1; // 当k等于l时,完成遍历,退出循环 while (k < l) { // 获取k和l对应值之和 const sum = nums[k] + nums[l]; // 但sum小于secondTarget时,表示nums[k]太小,需要移动k指针,知道遇到新的nums[k] if (sum < secondTarget) { k++; while (nums[k] === nums[k - 1]) { k++; } } // 但sum小于secondTarget时,表示nums[l]太小,需要移动k指针,知道遇到新的nums[kl] if (sum > secondTarget) { l--; while (nums[l] === nums[l + 1]) { l--; } } // 但sum等于secondTarget时,表示找到了符合条件的四元组 if (sum === secondTarget) { // 将四元组存入result result.push([nums[i], nums[j], nums[k], nums[l]]); // 为避免找到重复结果,需要移动k和l指针,直到遇到新值 k++; while (nums[k] === nums[k - 1]) { k++; } l--; while (nums[l] === nums[l + 1]) { l--; } } } } } return result; };
The text was updated successfully, but these errors were encountered:
No branches or pull requests
原题连接:https://leetcode-cn.com/problems/4sum/
解题思路:
nums[i] === nums[i - 1]
即可排除掉相等的值。The text was updated successfully, but these errors were encountered: