例题
1. 三数之和

思路
- 双指针
- 转化为两数之和
代码
Python代码:
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort()n = len(nums)res = []for i in range(n):if i > 0 and nums[i-1] == nums[i]:continuek = n - 1target = -nums[i]for j in range(i+1, n):if j > i+1 and nums[j] == nums[j-1]:continuewhile j < k and nums[j] + nums[k] > target:k -= 1if j == k:breakif nums[j] + nums[k] == target:temp = [nums[i], nums[j], nums[k]]res.append(temp)return res
Java代码:
class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);int n = nums.length;List<List<Integer>> res = new ArrayList<>();for(int i = 0; i < n; i++) {if (i > 0 && nums[i] == nums[i-1]) continue;int k = n - 1;int target = -nums[i];for (int j = i + 1; j < n; j++) {if (j > i + 1 && nums[j] == nums[j-1]) continue;while(j < k && nums[j] + nums[k] > target) {k--;}if (j == k) break;if (nums[j] + nums[k] == target) {List<Integer> temp = new ArrayList<>();temp.add(nums[i]);temp.add(nums[j]);temp.add(nums[k]);res.add(temp);}}}return res;}}
JavaScript代码:
var threeSum = function(nums) {nums.sort((a, b) => {if (a > b) {return 1;}if (a < b) {return -1;}return 0;});let n = nums.length;let res = [];for (let i = 0; i < n; i++) {if (i > 0 && nums[i] === nums[i-1]) continue;let k = n - 1;let target = -nums[i];for (let j = i + 1; j < n; j++) {if (j > i + 1 && nums[j] === nums[j-1]) continue;while (j < k && nums[j] + nums[k] > target) {k--;}if (j === k) break;if (nums[j] + nums[k] === target) {temp = [nums[i], nums[j], nums[k]]res.push(temp);}}}return res;};
