• LeetCode18. 四数之和


    一、题目描述

    ☆☆☆☆二、解法

    思路:与三数之和思想一样,排序+对撞指针。 时间复杂度 O(n^3)+O(nlogn) -> O(n^3)

    需要注意去重以及剪枝,小细节非常多。

    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
            List<List<Integer>> res = new ArrayList<>();
            if (nums == null || nums.length < 4) return res;
            Arrays.sort(nums);
    
            int len = nums.length;
            for (int i = 0; i < len - 3; i++) {
                if (i > 0 && nums[i] == nums[i - 1]) continue; // 去重
                if (nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target) return res; // 【剪枝】
                if (nums[i] + nums[len-3] + nums[len-2] + nums[len-1] < target) continue; // 【剪枝】
                for (int j = i + 1; j < len - 2; j++) {
                    // 注意j的范围,不能是 j>0,否则过不了用例 [0,0,0,0] , 0
                    if (j > i + 1 && nums[j] == nums[j - 1]) continue; // 去重
                    if (nums[i] + nums[j] + nums[j+1] + nums[j+2] > target) break; // 【剪枝】
                    if (nums[i] + nums[j] + nums[len-2] + nums[len-1] < target) continue; // 【剪枝】
                    int start = j + 1, end = len - 1;
                    while (start < end) {
                        int tempSum = nums[i] + nums[j] + nums[start] + nums[end];
                        if (tempSum > target) {
                            end --;
                        }else if (tempSum < target) {
                            start ++;
                        }else {
                            res.add(Arrays.asList(nums[i],nums[j],nums[start],nums[end]));
                            while (start < end && nums[start] == nums[start + 1]) start ++; // 去重
                            while (start < end && nums[end] == nums[end - 1]) end --; // 去重
                            start ++;
                            end --;
                        }
                    }
                }
            }
            return res;
        }
    }
  • 相关阅读:
    6、Docker Image
    5、Docker架构和底层技术
    4、Docker的安装
    3、Docker能干什么?
    2、Docker和虚拟机的对比
    1、Docker介绍
    20、Semantic-UI之数据验证
    Error:java: Compilation failed: internal java compiler error
    Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/ServletRegistrationBean
    spring boot自定义starter
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117557.html
Copyright © 2020-2023  润新知