【算法系列之十】三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

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

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Solution {public static void main(String[] args) {int[] nums = { -1, 0, 1, 2, -1, -4 };List<List<Integer>> threeSum = threeSum(nums);for (List<Integer> list : threeSum) {for (Integer sum : list) {System.out.print(sum + " ");}System.out.println("");}}private static List<List<Integer>> threeSum(int[] nums) {// 双指针思想:先对nums排序,三个数拆成1+2形式,第一个数nums[k]一定小于等于0,后两个数通过设置两个指针 i,j 分别指向数组两端:// 如果两指针所指向数nums[i]和nums[j]的和sub大于-nums[k],j指针前移,找一个更小的数;如果两指针所指向数的和小于target,// i指针后移,找一个更大点的数;如果相同,则返回即可。 List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums); // -4, -1, -1, 0, 1, 2for (int k = 0; k < nums.length; k++) {if (nums[k] > 0 || (k > 0 && nums[k] == nums[k - 1])) {continue; // 最小的数大于0不可能再组成结果0了 或者 返回的第一个数相等去重}int i = k + 1, j = nums.length - 1;while (i < j) {int sub = nums[i] + nums[j];if (sub == -nums[k]) {List<Integer> list = new ArrayList<>();list.add(nums[k]);list.add(nums[i]);list.add(nums[j]);res.add(list); // 添加结果while (i < j && nums[i] == nums[i + 1]) { // 第二个数相等去重i++;}while (i < j && nums[j] == nums[j + 1]) { // 第三个数相等去重j--;}i++;j--;} else if (sub > -nums[k]) {j--; // 三个数的和大于0,第三个数减小点} else {i++; // 三个数的和小于0,第二个数增大点}}}return res;}}

 

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

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

相关文章

android 动态获取全县_省市县 ------ 三级滚动(android)

预先加载仿滚轮实现的全部数据mCityPickerView.init(this);③ 点击响应&#xff1a;ss.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {CityConfig cityConfig new CityConfig.Builder().title("选择城市")//标题.build();m…

发电厂电气部分第三版pdf_火力发电厂电气主接线的特点

根据火力发电厂的容量及其在电力系统中的地位&#xff0c;一般可将火力发电厂分为区域性火力发电厂和地方性火力发电厂。这两类火力发电厂的电气主接线有各自的特点。一、区域性火力发电厂的电气主接线1、单机容量及总装机容量都较大单机容量多为300MW、600MW和少量1000MW,电厂…

【算法系列之十一】k个一组翻转链表

给出一个链表&#xff0c;每 k 个节点一组进行翻转&#xff0c;并返回翻转后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么将最后剩余节点保持原有顺序。 示例 : 给定这个链表&#xff1a;1->2->3-&g…

ghostblog主题_读Ghost博客源码与自定义Ghost博客主题

我使用的Ghost博客一直使用者默认的Casper主题。我向来没怎么打理过自己博客&#xff0c;一方面认为自己不够专业&#xff0c;很难写出质量比较高的文字&#xff1b;另一方面认为博客太耗时间&#xff0c;很容易影响正常的工作内容。最近公司即将搬迁&#xff0c;我的开发工作也…

【算法系列之十二】最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如&#xff0c;给定数组 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

定义一个dto对象_业务代码的救星——Java 对象转换框架 MapStruct 妙用

在业务项目的开发中&#xff0c;我们经常需要将 Java 对象进行转换&#xff0c;比如从将外部微服务得到的对象转换为本域的业务对象 domainobject&#xff0c;将 domainobject 转为数据持久层的 dataobject&#xff0c;将 domainobject 转换为 DTO 以便返回给外部调用方等。在转…

JVM调优总结 -Xms -Xmx -Xmn -Xss

堆大小设置 JVM 中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物理内存限制。32位系统 下&#xff0c;一般限制在1.5G~2G&#xff1b;64为操作系统对内存…

discuz设置用户每天回帖数_[建站教程]Discuz3.4设置QQ互联登陆教程

虽然现在很多人已经不在使用QQ了&#xff0c;但瘦死的骆驼比马大&#xff0c;QQ的用户基数还是很大&#xff0c;而且QQ里有大量的年轻用户&#xff0c;像我的表妹&#xff0c;表弟刚上初中。他们是忠诚的QQ用户。为了获取这批年轻的用户&#xff0c;我们还是有必要让网站支持QQ…

五种线程池的对比与使用

今天对五种常见的java内置线程池进行讲解。 线程使用的demo public static void cache() {ExecutorService pool Executors.newCachedThreadPool();long start System.currentTimeMillis();pool.execute(() -> {int sum 0;for (int i 0; i < 10; i) {sum (int) Ma…

16进制加法 keil_C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制

我们平时使用的数字都是由 0~9 共十个数字组成的&#xff0c;例如 1、9、10、297、952 等&#xff0c;一个数字最多能表示九&#xff0c;如果要表示十、十一、二十九、一百等&#xff0c;就需要多个数字组合起来。例如表示 58 的结果&#xff0c;一个数字不够&#xff0c;只能”…

MySQL的索引是什么?怎么优化?

索引类似大学图书馆建书目索引&#xff0c;可以提高数据检索的效率&#xff0c;降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降&#xff0c;虽然官方文档说500~800w记录&#xff0c;所以大数据量建立索引是非常有必要的。MySQL提供了Explain&#xff0c;用于显示…

通达信板块监控指标_通达信洞察强势板块指标公式

N:13;P:4;RN:27;VVAR1:(MA(CLOSE,80)-MA(CLOSE,13)/3);VVAR2:( MA((CLOSE-VVAR1)/VVAR1,1));VVAR3:(CLOSE-LLV(LOW,28))/(HHV(HIGH,28)-LLV(LOW,28))*100;VVAR4:SMA(VVAR3,4,1);MMA:EMA(VVAR2,12)*0.7;MMB:EMA(VVAR2,3);快到底:IF(LLV(MMB-MMA,12)>0,0,-20),LINETHICK2,COLO…

12306能删候补订单记录_12306候补购票功能在哪里怎么用 火车票候补购票使用攻略...

12月27日&#xff0c;12306火车票官方推出了一个「候补购票」功能&#xff0c;目前已经开启春运试点&#xff0c;对于购买火车票的用户来说&#xff0c;当没票可买的时候&#xff0c;可以提交候补购票&#xff0c;又多了一种购票途径了。不过&#xff0c;很多小伙伴对于候补购票…

GIT提交message规范

<type>(<scope>): <subject> <body> <footer> # type 用于说明 commit 的类别&#xff0c;只允许使用下面7个标识。 feat: 新功能&#xff08;feature&#xff09; fix: 修补bug docs: 文档&#xff08;documentation&#xff09; style: 格…

git实现审核功能_一文教你如何搭建PDD分佣小程序实现财富自由

随着拼多多的火爆&#xff0c;很多淘客以各种方式通过推广拼多多商品获取返佣来月入万元&#xff0c;实现财富自由。只要你有流量或者足够努力&#xff0c;像其他淘客一样实现睡后过万财富自由不是梦。本文通过详细教程教你快速搭建属于自己的PDD分佣小程序&#xff0c;完成自己…

9型转x型 cobol_兰州一餐馆推鸳鸯牛肉面 9种面型一面多吃

来源标题&#xff1a;兰州一餐馆推鸳鸯牛肉面&#xff0c;清汤酸菜各一边还有9种面型&#xff0c;网友&#xff1a;能连吃三碗近日&#xff0c;位于甘肃兰州的一家牛肉面馆推出了鸳鸯牛肉面。一个大碗分隔为两边&#xff0c;一边是传统清汤牛肉面&#xff0c;另一边是酸菜牛肉面…

gitignore不起作用

.gitignore中已经标明忽略的文件目录下的文件&#xff0c;git push的时候还会出现在push的目录中&#xff0c;原因是因为在git忽略目录中&#xff0c;新建的文件在git中会有缓存&#xff0c;如果某些文件已经被纳入了版本管理中&#xff0c;就算是在.gitignore中已经声明了忽略…

java填空题 在非静态成员方法中_成本加成定价法的优点有

【单选题】以下Math类的方法中,-4.4通过哪个方法运算后,结果为-5.0?【填空题】以下程序的输出结果为?【单选题】下列方法定义中,正确的是()【判断题】Java 中被 final 关键字修饰的变量,不能被重新赋值。【简答题】请按以下要求编写程序 (1) 创建一个Rectangle类,添加width和…

【算法系列之十三】二叉树两叶节点的最大距离

1、题目描述 给定一棵二叉树&#xff0c;计算这课二叉树的直径长度&#xff0c;即为二叉树任意两个节点间的最长路径。比如&#xff1a; 这棵二叉树的最长路径为3。 2、解题思路 使用递归进行求解&#xff0c;每次递归的过程中&#xff0c;先求出以某个节点为树根的二…

date比较大小 mybatis_Hibernate 和 MyBatis 哪个更好用?

Java大联盟帮助万千Java学习者持续成长关注作者&#xff5c;SylvanasSun郑沐兴https://zhuanlan.zhihu.com/p/21966051B 站搜索&#xff1a;楠哥教你学Java获取更多优质视频教程前言由于编程思想与数据库的设计模式不同&#xff0c;生出了一些ORM框架。核心都是将关系型数据库和…