LeetCode(15) 三数之和 Java

//现将数组进行升序排序,对等于0的情况比较去重.....

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        Arrays.sort(nums);
        int j,k;
        //System.out.println(Arrays.toString(nums));
        for(int i=0; i<nums.length-2; i++) {
            j = nums.length-1;
            k = i + 1;
            //第一层判断
            if(nums[i] > 0) break;
            if(i>0 && nums[i] == nums[i-1]) continue; //如果第二个i和第一个i相同就不必循环 
            while(k < j) {
                if (nums[i] + nums[j] + nums[k] == 0) {
                    List<Integer> it = Arrays.asList(nums[i],nums[j],nums[k]);
                    result.add(it);
                    while(k<j && nums[k] == nums[k+1]) k++;
                    while(k<j && nums[j] == nums[j-1]) j--;
                    k++;
                    j--;
                } else if (nums[i] + nums[j] + nums[k] < 0) {
                    k++;
                } else {
                    j--;
                }
            }
            
        }
    
        return result;
    }
}


public class test {
    public static void main(String[] args) {
        int[] nums = {-1, 0, 1, 2, -1, -4};
        Solution s = new Solution();
        List<List<Integer>> list = new ArrayList<>();
        list = s.threeSum(nums);
        System.out.println(list.toString());
    }
}

 

补充:

摘录:https://www.cnblogs.com/shanheyongmu/p/6364320.html

Arrays.asList(......) :将数组转化为list

注意:该方法不适用于基本数据类型数组;改方法将数组与列表链接起来,当更新其中之一时,另一个自动更新;不支持add和remove方法

 

posted @ 2018-09-04 10:30  wuyueping  阅读(360)  评论(0编辑  收藏  举报