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;
        }
  • 相关阅读:
    Nodejs学习笔记(三)--- 模块
    Nodejs学习笔记(二)--- 事件模块
    Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
    leetcode题解实践
    坑爹的bugsbunnyctf复现
    两道interesting的题目
    python 习题集
    数据结构与算法--java描述
    pentestbox下运行ssh报错,命令报错
    ntfs交换数据流在隐写
  • 原文地址:https://www.cnblogs.com/Michael2397/p/8018025.html
Copyright © 2011-2022 走看看