力扣(15.18)补9.19

news/2024/10/25 13:16:54/

15.三数之和

我以为不会太难,md不会。

a7724f64f4234d09bdd2f6b6566033d9.jpg

4058dade4ea541bb8bbb6bbf16a1eeb7.png 

29d9c1585d38445cb5a7019a2939b911.png 

c00b33b3497f4322a0fe4c78b398de2f.png 

 其实很让我惊讶的是,双指针用了2层循环但复杂度确是O(n)。牛🐮🐮🐮🐮🐮🐮🐮🐮🐮🐮🐮

另外这题除了算法思想,也有很多细节要处理,炒鸡花时间。

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans=new ArrayList<>();
        Arrays.sort(nums);
        int n=nums.length;
        for(int first=0;first<n-2;first++){
            int second=first+1,third=n-1,target=-nums[first];
            if((first>0&&nums[first]==nums[first-1])||nums[first]>0)
            continue;
            for(;second<third;second++){
                if(second>first+1&&nums[second]==nums[second-1])
                    continue;           
            while(third>second&&nums[second]+nums[third]>target){
                third--;
            }
            if(third==second)
            break;
            // System.out.println(first+" "+second+" "+third);
                if(nums[second]+nums[third]==target){                 
                    List<Integer> list=new ArrayList<>();
                    list.add(nums[first]);
                    list.add(nums[second]);
                    list.add(nums[third]);
                    ans.add(list);
                }
               
            }
        }
        return ans;

    }
}

18.四数之和

这题难度更大,但思路和三路之和一样,双指针简化一层循环。

class Solution {

    public List<List<Integer>> fourSum(int[] nums, int target) {

        List<List<Integer>> ans=new ArrayList<>();

        Arrays.sort(nums);

        int n=nums.length;

        if(n<=3)

        return ans;

        for(int a=0;a<nums.length-3;a++){

            if(a>0&&nums[a]==nums[a-1])

            continue;

            for(int b=a+1;b<n-2;b++){

                if(b>a+1&&nums[b]==nums[b-1])

                continue;

                int c=b+1,d=n-1;

                long target1=(long)target-(long)nums[a]-(long)nums[b];

                while(c<d){

                                       

                    if(nums[c]+nums[d]<target1) c++;

                    if(nums[c]+nums[d]>target1) d--;

                    if(c==d)break;

                    if(nums[c]+nums[d]==target1){

                        List<Integer> list=new ArrayList<>();

                        list.add(nums[a]);

                        list.add(nums[b]);

                        list.add(nums[c]);

                        list.add(nums[d]);

                        ans.add(list);

                    while(c<d&&nums[c]==nums[c+1]) c++;

                    while(c<d&&nums[d]==nums[d-1])d--; 

这俩个循环的位置十分关键,防止出现重复四元组,当四元组不满条件,直接用外面的循环筛掉,当满足条件,不能有重复。

                        c++;d--;

                    }

                }

            }

        }

        return ans;

    }

}


http://www.ppmy.cn/news/5775.html

相关文章

【Python基础】内置函数

Python内置函数 1 abs(x) 返回数字x的绝对值或复数的模 2 all(iterable) 如果对于可迭代对象中所有元素x都等价于True&#xff0c;即对所有元素x都有bool(x)等于True&#xff0c;则返回True&#xff1b;对于空的可迭代对象也返回True 3 any(iterable) 只要可迭代对象iter…

Python中转义字符是个啥

文章目录前言一、转义字符是什么&#xff1f;二、常见的转义字符有哪些&#xff1f;总结前言 昨天有粉丝问了我这个代码问题&#xff0c;如下图&#xff1a; 他很好奇代码都没有错误&#xff0c;怎么运行就报错&#xff0c;不知道有咩有小伙伴能看出问题在哪呢&#xff1f; 其…

Redis - Redis持久化:AOF和RDB

1. 为什么要持久化 Redis是内从数据库&#xff0c;宕机后数据会丢失&#xff1b;Redis重启后&#xff0c;为了快速恢复数据&#xff0c;提供了持久化机制&#xff1b;Redis有两种持久化方式&#xff1a;RDB和AOF&#xff0c;这也是Redis无畏宕机与快速恢复数据的杀手锏。 注意…

5G MEC UPF选择及本地分流技术分析

【摘 要】边缘计算的本质是一场架构革命,为满足超低时延和超大带宽等业务需求,应用从传统Client-Server架构转向Client-Edge-Server三级架构,实现云网融合。在5G网络中,如何为边缘应用选择合适的UPF,实现高效的本地分流成为关键问题。为解决这个问题,分析了采用5G核心网…

vue-element 表单校验

1. 表单校验 完整的表单校验需要三个组件完成配合,分别是el-form,el-form-item,表单项,如el-input el-form 负责绑定model和rulesel-form-item 负责绑定propel-input 负责双向绑定具体的表单数据 手动兜底校验 1.1 表单项校验 1.1.1 内置校验规则 在Rules:{}中给每一个需要…

Godzilla(哥斯拉)安装与使用

Godzilla安装与使用1.Godzilla介绍2.Godzliia下载与安装2.1.Godzilla下载2.2.运行环境2.3.Godzilla安装2.3.1.执行文件2.3.2.安装完成3.Godzliia3.1.Godzliia使用3.1.1.生成木马3.1.2.存储木马3.1.3.放入木马3.1.4.访问木马3.1.5.连接木马3.1.6.测试连接3.1.7.连接进入3.2.Godz…

要学的东西太多了怎么办

一、前言 为什么要写这篇博客&#xff0c;一方面是自己最近遇到一些事情然后刚想清楚&#xff0c;一方面是跟以前的同事朋友们聊天&#xff0c;发现他们都很沮丧&#xff0c;感叹学不完的知识以及焦虑年龄会影响职业生涯。在群上劝他们的我似乎成了那个唯一的奋斗逼&#xff0c…

单片机——LED

0. 单片机编程的一般步骤 目标分析&#xff1a;点亮开发板上的LED灯 电路原理图分析&#xff1a;相关器件的工作原理 数据手册分析&#xff1a;IO端口控制 代码编写、编译 下载与调试 1. LED简介 Led&#xff1a;即发光二极管&#xff0c;具有单向导通性&#xff0c;一般…