程序设计-寻找三数之和为零的三元组(Java)
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
package live.every.day.Programming;import java.util.ArrayList;
import java.util.Arrays;/*** 给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a、b、c,使得a+b+c=0。* 找出所有满足条件且不重复的三元组。** @author Created by LiveEveryDay*/
public class ThreeNumbersSumEqualsZero {public static ArrayList<ArrayList<Integer>> solve(int[] nums) {// 三元组用ArrayList<Integer>来表示ArrayList<ArrayList<Integer>> result = new ArrayList<>();if (nums == null || nums.length == 0) {return result;}// 排序Arrays.sort(nums);for (int i = 0; i < nums.length - 2; i++) {// 避免计算重复元素if (i != 0 && nums[i] == nums[i - 1]) {continue;}/*** 固定一个数,从后面的数中选出两个数。* 因为数组是有序的,所以可以用两个数组下标left和right,left指向当前元素的后一个位置,right指向数组的最后一个位置。* 三数相加的和等于0时,加入解集;* 三数相加的和小于0时,把left往右边移动;* 三数相加的和大于0时,把right往左边移动。*/int left = i + 1;int right = nums.length - 1;while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (sum == 0) {ArrayList<Integer> r = new ArrayList<>();r.add(nums[i]);r.add(nums[left]);r.add(nums[right]);result.add(r);left++;right--;// 避免计算重复元素while (left < right && nums[left] == nums[left - 1]) {left++;}// 避免计算重复元素while (left < right && nums[right] == nums[right + 1]) {right--;}} else if (sum < 0) {left++;} else {right--;}}}return result;}public static void main(String[] args) {int[] nums1 = {-1, 0, 1, 2, -1, -4};System.out.println(solve(nums1));int[] nums2 = {0};System.out.println(solve(nums2));int[] nums3 = {1, 2, 3, 4, 5, 6};System.out.println(solve(nums3));}}// Output:
/*
[[-1, -1, 2], [-1, 0, 1]]
[]
[]
*/
程序设计-寻找三数之和为零的三元组(Java)相关推荐
- 求三数之和为零的三元组集合
题目: 思路: 题目要求三数之和为零,即:a+b+c=0; 那么若满足b+c = -a的话就满足题目的第一个要求啦.假设-a = tem 那么 b+c=tem就说明满足条件.这样的话三数之和变成了两数 ...
- Leetcode算法Java全解答--16. 最接近的三数之和
Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...
- Leetcode 三数之和
三数之和 题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组.注意:答案中 ...
- 代码随想录算法训练营第七天|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
一.454.四数相加II 力扣 思路:第一眼还没反应过来,真是缺练.在四个数组中分别寻找,可以先把前两个数组的和先存入map中,再计算后两个数组元素的和,看一下相反数在map中出现没有,出现过就res ...
- (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和
代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...
- 三数之和(算法题目)
1.三数之和(算法题) 题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元 ...
- LeetCode实战:最接近的三数之和
题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...
- 《漫画算法2》源码整理-6 两数之和 三数之和
两数之和 import java.util.*;public class TwoSum {public static List<List<Integer>> twoSum(in ...
- LeetCode 259. 较小的三数之和(固定一点,内层双指针)
文章目录 1. 题目 2. 解题 1. 题目 给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target ...
最新文章
- 全网最火爆的“人生重开模拟器”,快来!
- 相对定位android,appium相对位置定位元素----父节点/兄弟节点定位
- [图像处理] Python+OpenCV实现车牌区域识别及Sobel算子
- Python3最长连续递增序列问题
- Leetcode算法题(C语言)4--旋转数组
- 巴特沃斯滤波器 python_巴特沃斯、切比雪夫、贝塞尔滤波器的区别
- hssfworkbook 单元格合并后宽度不生效_一起来学习Excel批量合并单元格的操作技巧...
- [LeetCode] Android Unlock Patterns 安卓解锁模式
- Linux 搭建SVN服务器
- MVC HtmlHelper扩展——实现分页功能
- 转载:什么是良好的Verilog代码风格?(作者KellenWang)
- informix的安装步骤
- ps图片去水印-图片一键去水印的app
- 我的世界服务器显示无法解析主机名什么意思,我开了我的世界服务器可为什么它出现无法解析主机名...
- 20-Netty TCP 粘包和拆包及解决方案
- 一元二次方程abc决定什么_二次函数中的a,b,c各决定什么?
- 运用PS扭曲滤镜 将书法贴在人体上
- Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的最好解决办法。
- node+express+mysql搭建一个系统
- Spring Boot 接入钉钉扫码登录