首页 > 其他分享 >15.三数之和

15.三数之和

时间:2024-05-03 18:23:04浏览次数:12  
标签:right 15 nums int 三数 三元组 ++ left

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

 

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

 

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

 

这个题目非常好想思路,把三数之和转化为两数之和,同时,我们需要在计算的时候去重。

class Solution {
    //-4, -1, -1, 0, 1, 2
public static List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> res = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (i > 0 && nums[i] == nums[i - 1]) continue; // 跳过重复的起始数字
            int target = -nums[i];
            int left = i + 1, right = nums.length - 1;
            while (left < right) {
                if (nums[left] + nums[right] > target) {
                    right--;
                } else if (nums[left] + nums[right] < target) {
                    left++;
                } else {
                    res.add(Arrays.asList(nums[i], nums[left], nums[right]));
                    while (left < right && nums[left] == nums[left + 1]) left++; // 跳过重复的中间数字
                    while (left < right && nums[right] == nums[right - 1]) right--; // 跳过重复的末尾数字
                    left++;
                    right--;
                }
            }
        }
        return res; // 去重过程直接在查找过程中完成,无需单独去重方法
    }
}

 

标签:right,15,nums,int,三数,三元组,++,left
From: https://www.cnblogs.com/ak918xp/p/18171461

相关文章

  • 15.Petclinic搜索接口测试执行-postman
    因 https://spring-petclinic-rest.k8s.hogwarts.ceshiren.com/petclinic/api/owners?lastName=LASTNAME接口不在支持使用故事用下方接口进行接口测试一、通过抓包获取接口信息,分析入参及响应数据选中接口鼠标右键选择:保存har导入postman二、根据接口和开发产品确认入参......
  • linux15-chmod修改文件,文件夹权限信息
    linux15-chmodchmodchangemode修改文件,文件夹的权限信息只有所属用户或root用户可以修改chmod[-R]权限文件或文件夹选项-R,对文件夹内的全部内容应用同样的操作(遍历)#将hello.txt的文件权限修改为rwxr-x--x#u,user;g,group;o,otherchmodu=rwx,g=rx,o=xh......
  • 攻防世界 serial-150 IDA动调
    比较完整的做题记录吧,很基础,当作过一遍题目,大佬请飘过题目 分析过程丢到PE里面,是一个64位的ELF 丢到IDA里面,查看字符串,发现线索 但是双击进去,不是汇编。是一个只读的rodata段 左边函数也不多,发现没有main函数,先点进去启动的start函数看看,发现main函数 点进去直......
  • 《自动机理论、语言和计算导论》阅读笔记:p215-p351
    《自动机理论、语言和计算导论》学习第11天,p215-p351总结,总计37页。一、技术总结1.constrainedproblem2.Fermat'slatstheoremFermat'sLastTheoremstatesthatnothreepositiveintegersa,bandcsatisfytheequationa^n+b^n=c^nforanyintegervalue......
  • 读天才与算法:人脑与AI的数学思维笔记15_声响的数学之旅
    1. 音乐1.1. 巴赫的作品以严格的对位著称,他十分中意对称的结构1.2. 巴托克的作品很多都以黄金比例为结构基础,他非常喜欢并善于使用斐波纳契数列1.3. 有时,作曲家是本能地或者不自知地被数学的模式和结构所吸引,而他们并没有意识到这些数学模式的意义1.4. 有时,他们主动去寻......
  • mycat启动报错Could not reserve enough space for 2097152KB object heap
    mycat启动报错:报错1:Couldnotreserveenoughspacefor2097152KBobjectheap找到wrapper.conf修改内存大小为1G #InitialJavaHeapSize(inMB)#wrapper.java.initmemory=3wrapper.java.initmemory=1024#MaximumJavaHeapSize(inMB)#wrapper.java.maxmemor......
  • 初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-015
    PDF格式公众号回复关键字:ZKYDT015原文1Sally’shousewasonfire,wasn’tit?解析1Sally’shouse莎莉的房子,wasonfire着火了,wasn’tit?不是吗莎莉的房子着火了,不是吗?2shefoundherfather,motherandsisterjammingtheirthingsintoahandcart.......
  • (中文规格)FPGA - 现场可编程门阵列: XC7S15-1CPGA196I、LCMXO3L-4300C-5BG256C,FS32K142
    1、XC7S15-1CPGA196I  Spartan®-7现场可编程门阵列产品种类:FPGA-现场可编程门阵列系列:XC7S15逻辑元件数量:12800LE自适应逻辑模块-ALM:2000ALM嵌入式内存:360kbit输入/输出端数量:100I/O电源电压-最小:950mV电源电压-最大:1.05V最小工作温度:-40°C最大工作温度:+100°C数......
  • 高精度1588PTP时钟交换机,让工业通信领域全面革新
    高精度1588PTP时钟交换机,让工业通信领域全面革新 高精度1588PTP时钟交换机,让工业通信领域全面革新 京准电子科技官微——ahjzsz前言随着计算机和互联网技术的发展,以太网通信技术以其通信速率高、兼容性好、互联和可扩展性好等优点,在电力系统、交通、自动驾驶和自动化控制等......
  • 统信 qt5.15.2安装
    mount挂载windows(dai)共享文件夹参考:https://www.cnblogs.com/LiuYanYGZ/p/12043945.html$cd/data/home/uos01/$mkdirwindows_share$sudomount-tcifs-ousername=share,password=share//192.168.11.111/share./windows准备要装环境的路径$cd/data/home/uos......