• LeetCode 18 四数之和


    LeetCode 18 四数之和

    问题描述:
    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
    注意

    • 答案中不可以包含重复的四元组。

    排序+双指针

    执行用时:12 ms, 在所有 Java 提交中击败了65.92%的用户
    内存消耗:39.1 MB, 在所有 Java 提交中击败了76.75%的用户

    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
            /*边界值*/
            List<List<Integer>> res = new ArrayList<List<Integer>>();
            if(nums.length<4) return res;
            /*借助三数之和加一重循环*/
            Arrays.sort(nums); /*排序*/
            for(int i=0;i<nums.length-2;i++){
                int j = i+1;
                 /*快速判断条件,减少运行时间*/
                if(nums[i]+3*nums[j]>target) break;
                for(;j<nums.length-1;j++){
                    int Target = -(nums[i]+nums[j]) + target;
                    int k=j+1,m=nums.length-1;
                    while(k<m){
                        if((nums[k]+nums[m])==Target){
                            List<Integer> curr = new ArrayList<Integer>();
                            curr.add(nums[i]);curr.add(nums[j]);
                            curr.add(nums[k]);curr.add(nums[m]);
                            res.add(curr);
                            k++;m--;
                            /*p3,p4指针去重*/
                            while(k<nums.length && nums[k-1]==nums[k]) k++;
                            while(m>j && nums[m]==nums[m+1]) m--;
                        }
                        else if((nums[k]+nums[m])>Target) m--;
                        else k++;
                    }
                    /*p2指针去重*/
                    while(j<nums.length-1 && nums[j]==nums[j+1]) j++;
                }
                /*p1指针去重*/
                while(i<nums.length-3 && nums[i]==nums[i+1]) i++; 
            }
            return res;
        }
    }
    
  • 相关阅读:
    【NOIP16提高组】换教室
    【扬中集训Day6T1】 白日梦
    【POJ 1061】 青蛙的约会
    【扬中集训DAY5T1】 交换矩阵
    【USACO】 Balanced Photo
    【USACO】 Balanced Lineup

    POJ P3352 Road Construction 解题报告
    洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
    洛谷 P2300 合并神犇 解题报告
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13770113.html
Copyright © 2020-2023  润新知