例题

1. 三数之和

image.png
思路

  • 双指针
  • 转化为两数之和

代码
Python代码:

  1. class Solution:
  2. def threeSum(self, nums: List[int]) -> List[List[int]]:
  3. nums.sort()
  4. n = len(nums)
  5. res = []
  6. for i in range(n):
  7. if i > 0 and nums[i-1] == nums[i]:
  8. continue
  9. k = n - 1
  10. target = -nums[i]
  11. for j in range(i+1, n):
  12. if j > i+1 and nums[j] == nums[j-1]:
  13. continue
  14. while j < k and nums[j] + nums[k] > target:
  15. k -= 1
  16. if j == k:
  17. break
  18. if nums[j] + nums[k] == target:
  19. temp = [nums[i], nums[j], nums[k]]
  20. res.append(temp)
  21. return res

Java代码:

  1. class Solution {
  2. public List<List<Integer>> threeSum(int[] nums) {
  3. Arrays.sort(nums);
  4. int n = nums.length;
  5. List<List<Integer>> res = new ArrayList<>();
  6. for(int i = 0; i < n; i++) {
  7. if (i > 0 && nums[i] == nums[i-1]) continue;
  8. int k = n - 1;
  9. int target = -nums[i];
  10. for (int j = i + 1; j < n; j++) {
  11. if (j > i + 1 && nums[j] == nums[j-1]) continue;
  12. while(j < k && nums[j] + nums[k] > target) {
  13. k--;
  14. }
  15. if (j == k) break;
  16. if (nums[j] + nums[k] == target) {
  17. List<Integer> temp = new ArrayList<>();
  18. temp.add(nums[i]);
  19. temp.add(nums[j]);
  20. temp.add(nums[k]);
  21. res.add(temp);
  22. }
  23. }
  24. }
  25. return res;
  26. }
  27. }

JavaScript代码:

  1. var threeSum = function(nums) {
  2. nums.sort((a, b) => {
  3. if (a > b) {
  4. return 1;
  5. }
  6. if (a < b) {
  7. return -1;
  8. }
  9. return 0;
  10. });
  11. let n = nums.length;
  12. let res = [];
  13. for (let i = 0; i < n; i++) {
  14. if (i > 0 && nums[i] === nums[i-1]) continue;
  15. let k = n - 1;
  16. let target = -nums[i];
  17. for (let j = i + 1; j < n; j++) {
  18. if (j > i + 1 && nums[j] === nums[j-1]) continue;
  19. while (j < k && nums[j] + nums[k] > target) {
  20. k--;
  21. }
  22. if (j === k) break;
  23. if (nums[j] + nums[k] === target) {
  24. temp = [nums[i], nums[j], nums[k]]
  25. res.push(temp);
  26. }
  27. }
  28. }
  29. return res;
  30. };