当前位置:   article > 正文

【LeetCode】15. 3Sum 三个数和为0

3sum 为0 leetcode

题目:

  Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

  Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • The solution set must not contain duplicate triplets.
  For example, given array S = [-1, 0, 1, 2, -1, -4],

  A solution set is:
  [
    [-1, 0, 1],
    [-1, -1, 2]
  ]

 思路:先对数组排序,for循环选定每个位置的数,在下个位置及末尾设置两个索引,从两边往中间走,找出两个数满足三者的和为0。因为数组有序,所以当和大于0时,右边索引左移,反之,左边索引右移。

  1. public class Solution {
  2. public List<List<Integer>> threeSum(int[] nums) {
  3. List<List<Integer>> result=new ArrayList<List<Integer>>();
  4. int len=nums.length;
  5. if(len<3) return result;
  6. int sum=0;
  7. Arrays.sort(nums);
  8. for(int i=0;i<nums.length;i++){
  9. if(nums[i]>0) break;
  10. if(i>0&&nums[i]==nums[i-1]) continue;
  11. int begin=i+1,end=len-1;
  12. while(begin<end){
  13. sum=nums[i]+nums[begin]+nums[end];
  14. if(sum==0){
  15. List<Integer> tem=new ArrayList<Integer>();
  16. tem.add(nums[i]);
  17. tem.add(nums[begin]);
  18. tem.add(nums[end]);
  19. result.add(tem);
  20. begin++;end--;
  21. while(begin<end&&nums[begin]==nums[begin-1]) begin++;
  22. while(begin<end&&nums[end]==nums[end+1]) end--;
  23. }else if(sum<0){
  24. begin++;
  25. }else end--;
  26. }
  27. }
  28. return result;
  29. }
  30. }

  

 

Discuss

转载于:https://www.cnblogs.com/zhstudy/p/6023048.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/366046
推荐阅读
相关标签
  

闽ICP备14008679号