zoukankan      html  css  js  c++  java
  • LeetCode关于数组中求和的题型

    15. 3Sum:三数之和为0的组合

     

    Note: 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]
    ]
    思路:循环法,先给数组排序->[-4,-1,-1,0,1,2],其中i,j,k三数的下标,i先为最左边的一个数,则i<n-3,此时可以根据求两数之和的方法来进行求解;
    对一个有序的数组求两数之和为定值,最简单的方法为j,k分别为数组的两端,主键向中间靠拢;
    具体代码如下:
    import java.util.*;
    public class Solution {
        public List<List<Integer>> threeSum(int[] nums) {
            List<List<Integer>> lists = new ArrayList<>();
            if(nums==null||nums.length==0)
                return lists;
            Arrays.sort(nums);
            int n = nums.length;
            int i=0;
            while(i<=n-3){
                int j=i+1;
                int k = n-1;
                while(j<k){
                    if(nums[i]+nums[j]+nums[k]==0){
                        ArrayList<Integer> list = new ArrayList<Integer>();
                        list.add(nums[i]);
                        list.add(nums[j]);
                        list.add(nums[k]);
                        lists.add(list);
                        while(j<k&&nums[j]==nums[j+1])
                            j++;
                        while(k>j&&nums[k]==nums[k-1])
                            k--;
                        j++;
                        k--;
                    }else if(nums[i]+nums[j]+nums[k]<0){
                        j++;
                    }else{
                        k--;
                    }
                }
                while(i<n-1&&nums[i]==nums[i+1])
                    i++;
                i++;
            }
            return lists;
        }
    }
  • 相关阅读:
    uva 10491 Cows and Cars
    uva 10910 Marks Distribution
    uva 11029 Leading and Trailing
    手算整数的平方根
    uva 10375 Choose and divide
    uva 10056 What is the Probability?
    uva 11027 Palindromic Permutation
    uva 10023 Square root
    Ural(Timus) 1081. Binary Lexicographic Sequence
    扩展欧几里得(求解线性方程)
  • 原文地址:https://www.cnblogs.com/coffy/p/5911059.html
Copyright © 2011-2022 走看看