zoukankan      html  css  js  c++  java
  • 三数之和等于0问题优化

    前面我们已经给出过三数之和等于0的代码,不过改代码在LeetCode上面超出时间限制,所以说,不能完全说解出该题,今天我们给出优解,

    直接上代码:

    思路:先对数组进行排序,用for循环控制一个变量i,另外两个j和k分别指向结尾和当前i的下一个位置,进行查找。

        public List<List<Integer>> threeSum(int[] nums) {
           Arrays.sort(nums);
            List<List<Integer>> lists = new ArrayList<List<Integer>>();
            if(nums.length > 2&& nums != null) {
                for(int i = 0; i < nums.length -2&& nums[i]<=0; ) {//第一个值不可能大于零
                    int j = i+1;
                    int k = nums.length - 1;
                    while(j < k  &&nums[k] >= 0) {
                        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]);
                            lists.add(list);
                            j++;
                            k--;
                            while(j < k && nums[j-1] == nums[j]) {//从左到右找到和上一个不同的值
                                j++;
                            }
                            while(j < k && nums[k] == nums[k+1]) {//从右到左找到和上一个不同的值
                                k--;
                            }
                        }else if(nums[i] + nums[j] + nums[k] > 0) {
                            k--;
                            while(j < k && nums[k] == nums[k+1]) {
                                k--;
                            }
                        }else {
                            j++;
                            while(j < k && nums[j] == nums[j-1]) {
                                j++;
                            }
                        }
                    }
                    i++;       //下标累加
                    while(i < nums.length -2 && nums[i] == nums[i-1]) {//找到和之前不同的下一个值
                        i++;
                    }
                }
            }
            
            return lists;
     }
  • 相关阅读:
    day04 Java Web 开发入门
    day0203 XML 学习笔记
    canvas 基础
    TreeSet
    IntelliJ IDEA
    elastic-job-lite
    Spring 同一接口注入多个bean实现
    StringRedisTemplate
    小记
    linux 命令
  • 原文地址:https://www.cnblogs.com/du001011/p/10507806.html
Copyright © 2011-2022 走看看