码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 15 3Sum

时间:2015-06-14 22:40:37      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

Given an array S of n integers, are there elements abc 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)
超时的做法,先将其排序,一个指针指向队首,一个指向队尾,另一个指针在中间,不断移动指针,看其是否能够满足条件。
技术分享
 public static List<List<Integer>> threeSum(int[] nums) {
           Arrays.sort(nums);
            List<List<Integer>> ans=new ArrayList<List<Integer>>();    
            int m=nums.length;
            if(m<3)
            return ans;
            int l=0;
            int a=0;
            int num0=0;
            while(a<m){
                if(nums[a]<0){
                    l++;
                }
                if(nums[a]==0){
                    num0++;
                }
                
                a++;
            }
            System.out.println(nums);
            System.out.println(l);
           if(l+num0==0){
              return ans;
           }
           
           if(l+num0==m){
               if(nums[m-1]==nums[m-2]&&nums[m-2]==nums[m-3]&&nums[m-3]==0){
                   List<Integer> temp=new ArrayList<Integer>();
                   temp.add(nums[0]);
                    temp.add(nums[0]);
                    temp.add(nums[0]);
                    ans.add(temp);
               }
               
               return ans;
           }
            int i=0;
            
            int k;
            System.out.println(l);
            while(i<l){
                if(i>=1){
                  if(nums[i]==nums[i-1]){
                      i++;
                      continue;
                  }
                     
              }
                int j=m-1;
                while(j>l){
                    if(j<m-1){
                      if(nums[j]==nums[j+1]){
                          j--;
                          continue;
                      }
                         
                      
                  }
                    k=i+1;
                         while(i<k&&k<j){
                             if(k==i+1&&nums[k]==nums[i]){
                                 if(nums[i]+nums[j]+nums[k]==0){
                                          List<Integer> temp=new ArrayList<Integer>();
                                          temp.add(nums[i]);
                                          temp.add(nums[k]);
                                          temp.add(nums[j]);
                                          ans.add(temp);
                                          }
                             } 
                             
                             if(nums[k]==nums[j]){
                                 if(nums[i]+nums[j]+nums[k]==0){
                                          List<Integer> temp=new ArrayList<Integer>();
                                          temp.add(nums[i]);
                                          temp.add(nums[k]);
                                          temp.add(nums[j]);
                                          ans.add(temp);
                                          }
                                 break;
                             } 
                             
                             if(nums[k]==nums[k-1]){
                                
                                     k++;
                                         continue;
                                 } 
                                   
                            
                             
                                 if(nums[i]+nums[j]+nums[k]==0){
                                      List<Integer> temp=new ArrayList<Integer>();
                                      temp.add(nums[i]);
                                      temp.add(nums[k]);
                                      temp.add(nums[j]);
                                      ans.add(temp);
                                      }
                                 if(nums[i]+nums[j]+nums[k]>0){
                                     break;
                                 }
                             System.out.println(i+" "+j+" "+k);
                             
                             k++;
                             
                             /*if(!(i<k&&k<j))
                                 break;
                                */
                } 
                             
                             
                j--;
                         
          }
                
      i++;
}
View Code

 

LeetCode 15 3Sum

标签:

原文地址:http://www.cnblogs.com/gonewithgt/p/4575766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!