LeetCode18-四数之和

news2025/1/15 23:28:59

在这里插入图片描述
注意!其中nums数值的范围,四个加一起会导致INT溢出,long类型则是64位的整数,因此不会导致溢出,这也是本题难点之一!

大佬解法(拿捏offer的解法)

经过反复的代码比对和Debug,发现大佬解法的速度之快体现在足足7个if语句的剪枝,其中包括了2个关键性的去重的if语句以及2个关键性的k,h去重while语句!!!

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> ans=new ArrayList<>();
        int i=0,j=0,k=0,n=nums.length,h=n-1;
        Arrays.sort(nums);
        for(;i<n-3;++i){
            j=i+1;
            if((nums[i]>0&&target<0)||(nums[i]>=Integer.MAX_VALUE/4)){//剪枝1
                return ans;
            }     
            if(i>0&&nums[i]==nums[i-1]){//i的去重,剪枝2
                continue;
            }
            if((long)nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target){//剪枝3
                break;
            }  
            if((long)nums[i]+nums[n-3]+nums[n-2]+nums[n-1]<target){//剪枝4
                continue;
            }
            for(;j<n-2;++j){
                k=j+1;
                h=n-1;
                if(j>i+1&&nums[j]==nums[j-1]){// j的去重,剪枝5
                    continue;
                }
                if((long)nums[i]+nums[j]+nums[j+1]+nums[j+2]>target){//剪枝6
                    break;
                }
                if((long)nums[i]+nums[j]+nums[n-1]+nums[n-2]<target){//剪枝7
                    continue;
                }
                for(;k<h;){
                    long sum=0;
                    sum=(long)nums[i]+nums[j]+nums[k]+nums[h];

                    if(sum==target){
                        
                        List<Integer> res=Arrays.asList(nums[i],nums[j],nums[k],nums[h]);

                        ans.add(res);
                        // h=n-1;
                        // k++;
                        while(k<h&&nums[k]==nums[k+1]){k++;}//k的去重
                        k++;
                        while(k<h&&nums[h]==nums[h-1]){h--;}//h的去重
                        --h;
                    }
                    else if(sum>target){
                        h--;
                    }
                    else if(sum<target){
                        k++;
                    }
                }
            }
        }
        return ans;
    }
}

暴力解法(面试必挂,只能回家斗地主的解法)

根据三数之和的经验和力抠提示的测试用例通过了,md真的比较难

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> ans=new LinkedList<>();
        int i=0,j=0,k=0,n=nums.length,h=n-1;
        Arrays.sort(nums);
        for(;i<n-3;++i){
            j=i+1;
            if(nums[i]>=Integer.MAX_VALUE/4){
                return ans;
            }       
            for(;j<n-2;++j){
                k=j+1;
                h=n-1;
                for(;k<h;){
                    int sum=0;
                    sum=nums[i]+nums[j]+nums[k]+nums[h];
                    
                    if(sum>target){
                        h--;
                    }
                    else if(sum<target){
                        k++;
                    }
                    else {
                        
                        List<Integer> res=new LinkedList<>();
                        res.add(nums[i]);
                        res.add(nums[j]);
                        res.add(nums[k]);
                        res.add(nums[h]);
                        if(!ans.contains(res))//速度瓶颈在这里,卡在17ms的时间
                            ans.add(res);
                        h=n-1;
                        k++;
                        while(k>=1&&k<n&&nums[k]==nums[k-1]){k++;}
                        while(h>=0&&h+1<n&&nums[h]==nums[h+1]){h--;}
                    }
                }
            }
        }
        return ans;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1197743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证

文章目录 openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证概述笔记重复数字IO的问题想法手工实现程序实现确定要摘掉的数字重合线自动化测试的问题测试程序的场景测试程序的运行效果测试程序实现备注END openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-14…

推荐这款机器学习的特征筛选神器!

大家好&#xff0c;特征选择是机器学习建模流程中最重要的步骤之一&#xff0c;特征选择的好坏直接决定着模型效果的上限&#xff0c;好的特征组合甚至比模型算法更重要。除了模型效果外&#xff0c;特征选择还有以下几点好处&#xff1a; 提高模型性能并降低复杂性&#xff08…

Spring Cloud学习(六)【统一网关 Gateway】

文章目录 网关的功能搭建网关服务路由断言工厂Route Predicate Factory路由过滤器 GatewayFilter过滤器执行顺序跨域问题处理 网关的功能 网关功能&#xff1a; 身份认证和权限校验服务路由、负载均衡请求限流 在SpringCloud中网关的实现包括两种&#xff1a; gatewayzuul …

到底是什么是Python?语言的核心是什么?

文章目录 前言一、为什么提出python编程的核心是什么&#xff1f;二、Python需要REPL&#xff1f;三、Python的哪些部分需要被视为“Python”&#xff1f;四、需要多少兼容性才能有用&#xff1f;Python技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学…

计算机网络技术

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 如图所示&#xff0…

Windows11跳过联网激活 跳过登陆操作

1 背景 笔者使用VirtualBox时安装Win11&#xff0c;初始化的配置提示需要注册账户才能进行下一步操作&#xff0c;于是去查了一下发现有办法绕过&#xff0c;方法就是断网oobe\ByPassNRO.cmd&#xff0c;试了一下发现可以&#xff0c;便有了这篇文章。 2 流程 开机之前&…

【星海随笔】SDN neutron (二) Neutron-plugin(ML2)

Neutron架构之Neutron-plugin Core-plugin(ML2)篇 Neutron-server接收两种请求&#xff1a; REST API请求&#xff1a;接收REST API请求&#xff0c;并将REST API分发到对应的Plugin&#xff08;L3RouterPlugin&#xff09;。 RPC请求&#xff1a;接收Plugin agent请求&#…

QT 布局管理综合实例

通过一个实例基本布局管理&#xff0c;演示QHBoxLayout类、QVBoxLayout类及QGridLayout类效果 本实例共用到四个布局管理器&#xff0c;分别是 LeftLayout、RightLayout、BottomLayout和MainLayout。 在源文件“dialog.cpp”具体代码如下&#xff1a; 运行效果&#xff1a; Se…

【Spring】SpringBoot日志

SpringBoot日志 日志概述日志使用打印日志获取日志对象使用日志对象打印日志日志框架介绍门面模式SLF4J框架介绍(simple logging facade for java) 日志格式说明日志级别日志级别的分类日志级别的使用 日志配置配置日志级别日志持久化配置日志文件的路径和文件名配置日志文件的…

centos7安装linux版本的mysql

1.下载linux版本的mysql 进入mysql官网&#xff0c;点击社区版本下载&#xff1a; https://dev.mysql.com/downloads/mysql/ 选择版本&#xff0c;可以跟着我下面这个图进行选择&#xff0c;选择红帽版本的既可&#xff0c;都是linux版本的。 2.上传解压linux版本的mysql安装包…

C++初阶--类与对象(3)(图解)

文章目录 再谈构造函数初始化列表隐式类型转换explicit关键字 static成员友元类内部类匿名对象拷贝函数时的一些优化 再谈构造函数 在我们之前的构造函数中&#xff0c;编译器会通过构造函数&#xff0c;对对象中各个成员给出一个适合的初始值&#xff0c;但这并不能称之为初始…

思维模型 超限效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。物极必反。 1 超限效应的应用 1.1 教育中的超限效应 一位老师在课堂上批评了一位学生&#xff0c;这位学生可能会因为老师的批评而感到沮丧和失落。如果老师在接下来的课程中继续批评这位…

数据结构与算法—搞懂队列

csdn专栏&#xff1a;数据结构与算法 前言 栈和队列是一对紧密相关的数据结构。之前已经介绍过栈&#xff08;它遵循后进先出的原则&#xff09;&#xff0c;栈的机制相对简单&#xff0c;就像你进入一个狭窄的山洞&#xff0c;山洞只有一个出入口&#xff0c;因此你只能按照后…

【原创分享】Mentor PADS将PCB封装直接添加到PCB的教程

一般&#xff0c;批量添加封装到PCB板上有以下方法&#xff1a; 第一步&#xff1a;点击菜单栏“ECO模式--添加元器件”如图&#xff0c;点击以后弹出如图界面。 1&#xff09;元件类型 PCB封装必须得添加完元件类型&#xff0c;才能通过ECO模式添加到PCB界面里面&#xff0c…

[Linux打怪升级之路]-信号的保存和递达

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、信号的保…

红黑树-RBTree

目录 1. 红黑树的概念2. 红黑树的性质3. 结点的定义4. 结点的插入5. 整体代码 1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式…

基于51单片机RFID射频门禁刷卡系统设计

**单片机设计介绍&#xff0c; 基于51单片机RFID射频门禁刷卡系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序 六、 文章目录 一 概要 基于51单片机RFID射频门禁刷卡系统&#xff0c;是一种将单片机技术和射频标识技术应用于门禁控制系统的…

34 Feign最佳实践

2.4.2.抽取方式 将Feign的Client抽取为独立模块&#xff0c;并且把接口有关的POJO、默认的Feign配置都放到这个模块中&#xff0c;提供给所有消费者使用。 例如&#xff0c;将UserClient、User、Feign的默认配置都抽取到一个feign-api包中&#xff0c;所有微服务引用该依赖包…

一篇文章真正讲懂模型评估指标(准确率,召回率,精确率,roc曲线,AUC值)

背景&#xff1a; 最近在做一些数据分析的比赛的时候遇到了一些头疼的问题&#xff0c;就是我们如何评估一个模型的好坏呢&#xff1f; 准确率&#xff0c;召回率&#xff0c;精确率&#xff0c;roc曲线&#xff0c;roc值等等&#xff0c;但是模型评估的时候用哪个指标呢&…

[工业自动化-12]:西门子S7-15xxx编程 - PLC从站 - ET200 SP系列详解

目录 一、概述 1.1 概述 二、系统组成 2.1 概述 2.2 与主站的通信接口模块 2.3 总线适配器 2.4 基座单元 2.5 电子模块 2.6 服务器模块 一、概述 1.1 概述 PLC ET200 SP 是西门子&#xff08;Siemens&#xff09;公司生产的一款模块化可编程逻辑控制器&#xff08;PL…