zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    从0开始学习 GitHub 系列之「02.加入 GitHub」
    从0开始学习 GitHub 系列之「01.初识 GitHub
    用Redis轻松实现秒杀系统
    算法之美
    Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
    6)django-示例(fbv)
    5)django-模板
    4)django-视图view
    3)django-路由系统url
    2)django-请求生命周期
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13770113.html
Copyright © 2011-2022 走看看