js给你一个包含 n 个整数的数组 nums,判断是否可以通过在数组中选择一个起始点,然后向后选择两个整数,使得这三个整数的和等于目标值。
时间: 2024-10-09 18:01:52 浏览: 27
数学建模拟合与插值.ppt
这个问题是一个常见的数组遍历和滑动窗口(Sliding Window)问题,在JavaScript中可以使用双指针(两个指针从数组两端开始向中间移动)来解决。我们可以维护两个指针i和j,分别表示左边界和右边界,初始时i和j都指向第一个元素。然后,我们不断更新目标值与nums[i]+nums[j]的差值,如果这个差值是0,就找到了一组符合条件的三个数;如果不是0,根据差值的正负方向调整i或j。
```javascript
function threeSum(nums, target) {
nums.sort((a, b) => a - b); // 先排序,保证重复元素的处理
let res = [];
for (let i = 0; i < nums.length - 2; i++) { // 只考虑前n-2个元素
if (i > 0 && nums[i] === nums[i - 1]) continue; // 忽略重复元素
let left = i + 1, right = nums.length - 1;
while (left < right) {
let sum = nums[i] + nums[left] + nums[right];
if (sum === target) {
res.push([nums[i], nums[left], nums[right]]);
while (left < right && nums[left] === nums[left + 1]) left++; // 移除重复的right
while (left < right && nums[right] === nums[right - 1]) right--; // 移除重复的left
left++;
right--;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return res;
}
```
阅读全文