zoukankan      html  css  js  c++  java
  • LeetCode:15. 3Sum

    
    

    自己的解法,有问题,花费我三个小时

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class Sum3 {
        public static void main(String[] args) {
             int[] S = new int[]{-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6};
             List<List<Integer>> list2 = threeSum(S);
             for (int i = 0; i < list2.size(); i++) {
                System.out.println(list2.get(i));
            }
        }
    
        public static List<List<Integer>> threeSum(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> list2 = new ArrayList<>();
            for (int i = 0; i < nums.length; i++) {
                for (int j = i+1; j < nums.length; j++) {
                    for (int k = j+1; k < nums.length; k++) {
                        if(nums[i]+nums[j]+nums[k]==0){
                            List<Integer> list = new ArrayList<>();
                            list.add(nums[i]);
                            list.add(nums[j]);
                            list.add(nums[k]);
                            list2.add(list);
                        }
                    }
                }
            }
             for (int i = list2.size() - 1; i >= 1; i--) {
                    for (int j = i-1; j >= 0; j--) {
                        if (list2.get(i).get(0) == list2.get(j).get(0)
                            && list2.get(i).get(1) == list2.get(j).get(1)
                            && list2.get(i).get(2) == list2.get(j).get(2)) {
                            list2.remove(j);
                            i--;
                        }
                    }
                }
            return list2;
        }
    }

     网上的解法

    public static List<List<Integer>> threeSum(int[] nums) {
            List<List<Integer>> list = new ArrayList<List<Integer>>();
            if (nums == null || nums.length == 0)
                return list;
            Arrays.sort(nums);
            
            for (int i = 0; i < nums.length; i++) {
                if(i-1>=0&&nums[i]==nums[i-1]) continue;
                int left = i+1;
                int right = nums.length-1;
                while(left<right){
                    int sum =nums[i]+nums[left]+nums[right];
                    if(sum==0){
                        list.add(Arrays.asList(nums[i],nums[left],nums[right]));  
                        while(left+1<right&&nums[left]==nums[left+1]){  //left左右相同的话,就往右移动
                            left++;
                        }
                        while(left+1<right&&nums[right]==nums[right-1]){
                            right--;
                        }
                        left++;       //排除左右相同的影响,向右移动
                        right--;
                        
                    }else if(sum<0){
                        left++;
                    }else{
                        right--;
                    }
                }
    
            }
            return list;
        }
  • 相关阅读:
    com.panie 项目开发随笔_前后端框架考虑(2016.12.8)
    Jsoup 使用教程:数据抽取
    Jsoup 使用教程:输入
    项目中图片处理总结
    jsonp 跨域请求
    由Memcached升级到 Couchbase的 Java 客户端的过程记录(三)
    由Memcached升级到 Couchbase的 Java 客户端的过程记录(二)
    jquery eval解析JSON中的注意点介绍
    JS禁止WEB页面鼠标事件大全
    jQuery事件之鼠标事件
  • 原文地址:https://www.cnblogs.com/Michael2397/p/8018025.html
Copyright © 2011-2022 走看看