lc18.四数之和

news2024/10/6 2:25:15

三数之和的延申,四数之和:两层外层for循环+双指针

时间复杂度:O(n3)

空间复杂度:O(1)

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FourSum {

    @Test
    public void test() {
        int[] nums = new int[]{1, 0, -1, 0, -2, 2};
        for (int i = 0; i < fourSum(nums,0).size(); i++) {
            System.out.println(fourSum(nums,0).get(i));
            //[2,-1,1,2],[-2,0,0,2],[-1,0,0,1]
        }
        int[] nums1 = new int[]{2, 2, 2, 2};
        for (int i = 0; i < fourSum(nums1,8).size(); i++) {
            System.out.println(fourSum(nums1,8).get(i));

        }
    }

    public static List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        for (int i = 0; i <= nums.length - 4; i++) {//避免越界
            if (i > 0 && nums[i] == nums[i - 1]) {//nums = [2,2,2,2]的情况时,在i == 0,j == i+1的时候完成存入
                continue;
            }

            for (int j = i + 1; j <= nums.length - 3; j++) {
                if (j > i+1 && nums[j] == nums[j - 1]) {
                    continue;
                }

                int l = j + 1, r = nums.length - 1;
                while (l < r) {
                    int sum = nums[i] + nums[j] + nums[l] + nums[r];
                    if (sum == target) {
                        res.add(Arrays.asList(nums[i],nums[j], nums[l], nums[r]));
                        //处理相同的数的情况
                        //因为最后输出的nums数组中的值,不是索引,所以数字相同可以直接跳过
                        while (l < r && nums[l] == nums[++l]) ;
                        while (l < r && nums[r] == nums[--r]) ;
                    } else if (sum < target) {
                        l++;
                    } else {
                        r--;
                    }
                }
            }

        }
        return res;

    }
}

详情见三数之和

lc15.三数之和_鬼鬼写bug的博客-CSDN博客

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

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

相关文章

Centos7.9安装lrzsz进行文件传输---Linux工作笔记059

这里咱们lrzsz命令,需要用来进行文件传输,因为如果不安装这个命令的话,那么 传输安装包什么的就不方便因为只有少数传输工具,才支持,直接拖拽的.没有的时候就可以用这个工具,用命令来传输 直接就是: sz 文件名 就可以把文件下载下来 rz 选择一个文件, 就可以把文件上传到当…

Spring Cloud构建微服务断路器介绍

什么是断路器 断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置&#xff0c;用于在电路上保护线路过载&#xff0c;当线路中有电器发生短路时&#xff0c;“断路器”能够及时的切断故障电路&#xff0c;防止发生过载、发热、甚至起火等严重后果…

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…

主数据管理案例-某政务

1、 背景介绍及难点分析 近年来&#xff0c;我国在大数据发展方面持续发力&#xff0c;取得了明显成效。但也要看到&#xff0c;目前我国大数据发展还存在“孤岛化”“碎片化”等问题&#xff0c;无序参与过度与创新参与不足并存&#xff0c;导致大数据资源配置统筹不&#xff…

Client not connected, current status:STARTING

今天项目集成Seata时遇到一个奇怪的异常&#xff0c;在此记录一下。 Linux环境安装Seata&#xff0c;使用Nacos作为配置中心、注册中心&#xff1b; Linux已开放端口&#xff1a;8848、7091、8091 在我Windows环境下可以看到Nacos运行正常&#xff0c;Seata运行也正常&#…

SOLIDWORKS工程图模板制作

为什么要制作工程图模板 SOLIDWORKS软件以其优良的技术和市场表现&#xff0c;成为CAD领域一颗耀眼的明星&#xff0c;拥有强大的功能。为了实现更规范、更快捷、更方便、更准确的绘图&#xff0c;制作工程图模板是必要的。SolidWorks工程图的优势在于零件模型的尺寸与工程图相…

火山引擎联合Forrester发布《中国云原生安全市场现状及趋势白皮书》,赋能企业构建云原生安全体系

国际权威研究咨询公司Forrester 预测&#xff0c;2023年全球超过40%的企业将会采用云原生优先战略。然而&#xff0c;云原生在改变企业上云及构建新一代基础设施的同时&#xff0c;也带来了一系列的新问题&#xff0c;针对涵盖云原生应用、容器、镜像、编排系统平台以及基础设施…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——假设

通用方法/没有特点 方法关系 199-2013-1-41——方法关系——方法有效或方法可行 新近一项研究发现&#xff0c;海水颜色能够让飓风改变方向&#xff0c;也就是说&#xff0c;如果海水变色&#xff0c;飓风的移动路径也会变向。这也就意味着科学家可以根据海水的“脸色”判断…

DS VPN实验

目录 DS VPN实验 1、首先为所有接口配置ip地址、回环地址&#xff1a; 2、为3-8这些设备配置一条缺省指向R2 3、在R1-R3-R4这三个设备之间搭建MGRE 4、配置OSPF让各个主机之间可以进行通信 5、修改隧道接口的网络类型为p2mp 6、在R1上开启重定向、在R3、R4上配置最短 7…

WDT看门狗寄存器实验

WDT寄存器 作用&#xff1a;监控CPU是否出现错误&#xff0c;出现错误向CPU发送复位信号 工作原理&#xff1a;向WDT写入一个100的值&#xff0c;递减&#xff0c;正常程序执行时会定时向WDT发送一个比较大的定时数&#xff0c;这样就不会减到零 有两种功能&#xff1a; 1. 当…

2.利用matlab建立符号函数和符号方程(matlab程序)

1.简述 一、引言 符号函数是Matlab的一个非常重要的功能&#xff0c;可以用来表示数学上的函数&#xff0c;同时也是进行数值计算。创建符号函数的方法有多种&#xff0c;本文给出了四种生成符号函数的方法及求符号函数函数值的方法。 四种生成符号函数的方法&#xff1a;有利用…

【Linux】gcc编译器的使用和介绍

目录 一&#xff0c;GCC简介 二&#xff0c;GCC的主要组件 三&#xff0c;GCC的工作流程 四&#xff0c;GCC的一些重要特性和功能 五&#xff0c;GCC常用的编译选项 六&#xff0c;GCC的输入输出选项的具体用法 七&#xff0c;GCC的参考文档 一&#xff0c;GCC简介 GCC&…

预测性维护如何改变设备管理部门的工作方式?

在现代工业中&#xff0c;设备管理部门面临着日益复杂的挑战。维护工作的准确性和高效性变得愈发重要&#xff0c;特别是在资产技术日益复杂的背景下。预测性维护&#xff08;PdM&#xff09;作为一种革命性的方法&#xff0c;通过实时评估运营数据并利用人工智能&#xff08;A…

Android Studio 拉取代码后 git显示大量文件被修改

参考&#xff1a; 在 Git 中正确设置 CRLF、LF 换行符转换 现象 拉取后再Android Studio 中显示正常&#xff0c;但是 run 之后&#xff0c;所有的文件在git 中显示 modify。 查看具体变更发现是所有的内容先显示删除 - &#xff0c;在显示添加 Beyond Compare 文本比较显…

Visdom安装避坑

VIsdom&#xff0c;与tensorboard作用类似 通过以下命令安装Visdom&#xff0c; pip install visdom 启动visdom服务 python -m visdom.server 运行一直卡在Downloading scripts, this may take a little while&#xff0c;某些资源因为网络问题难以下载&#xff0c;导致一…

利用SCCM进行横向移动

01SCCM介绍 SCCM全名为System Center Configuration Manager&#xff0c;从版本1910开始&#xff0c;微软官方将其从Microsoft System Center产品移除&#xff0c;重新命名为Microsoft Endpoint Configuration Manager&#xff08;ConfigMgr&#xff09;&#xff0c;其可帮助 …

W6100-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…

实现分布式事务:Java与MySQL的XA事务协调

目录 一、什么是XA事务 二、Java中的XA事务支持 三、MySQL的XA事务协调 四、注意事项和最佳实践 五、基于 java 语言的开发工具 六、小结 分布式事务是在跨多个数据库或服务之间保持一致性的重要机制。Java与MySQL的XA&#xff08;eXtended Architecture&#xff09;事务…

获取接口的所有实现

一、获取接口所有实现类 方法1&#xff1a;JDK自带的ServiceLoader实现 ServiceLoader是JDK自带的一个类加载器&#xff0c;位于java.util包当中&#xff0c;作为 A simple service-provider loading facility。 &#xff08;1&#xff09;创建接口 package com.example.dem…

Lua 数据类型 —— 字符串

一、字符串 Lua 使用 八个比特位来存储 字符。&#xff08;一个字节 八个比特位&#xff09; Lua 最好使用 UTF-8 编码。 字符串是不可变值&#xff0c;和 java 和 kotlin 相似&#xff0c;修改其中某一个字符&#xff0c;都是创建一个新的字符串。 Lua 对字符串会进行自动…