分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击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)相关推荐

  1. 求三数之和为零的三元组集合

    题目: 思路: 题目要求三数之和为零,即:a+b+c=0; 那么若满足b+c = -a的话就满足题目的第一个要求啦.假设-a = tem 那么 b+c=tem就说明满足条件.这样的话三数之和变成了两数 ...

  2. Leetcode算法Java全解答--16. 最接近的三数之和

    Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...

  3. Leetcode 三数之和

    三数之和 题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组.注意:答案中 ...

  4. 代码随想录算法训练营第七天|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

    一.454.四数相加II 力扣 思路:第一眼还没反应过来,真是缺练.在四个数组中分别寻找,可以先把前两个数组的和先存入map中,再计算后两个数组元素的和,看一下相反数在map中出现没有,出现过就res ...

  5. (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和

    代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...

  6. 三数之和(算法题目)

    1.三数之和(算法题)  题目:  给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元 ...

  7. LeetCode实战:最接近的三数之和

    题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...

  8. 《漫画算法2》源码整理-6 两数之和 三数之和

    两数之和 import java.util.*;public class TwoSum {public static List<List<Integer>> twoSum(in ...

  9. LeetCode 259. 较小的三数之和(固定一点,内层双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target ...

最新文章

  1. 全网最火爆的“人生重开模拟器”,快来!
  2. 相对定位android,appium相对位置定位元素----父节点/兄弟节点定位
  3. [图像处理] Python+OpenCV实现车牌区域识别及Sobel算子
  4. Python3最长连续递增序列问题
  5. Leetcode算法题(C语言)4--旋转数组
  6. 巴特沃斯滤波器 python_巴特沃斯、切比雪夫、贝塞尔滤波器的区别
  7. hssfworkbook 单元格合并后宽度不生效_一起来学习Excel批量合并单元格的操作技巧...
  8. [LeetCode] Android Unlock Patterns 安卓解锁模式
  9. Linux 搭建SVN服务器
  10. MVC HtmlHelper扩展——实现分页功能
  11. 转载:什么是良好的Verilog代码风格?(作者KellenWang)
  12. informix的安装步骤
  13. ps图片去水印-图片一键去水印的app
  14. 我的世界服务器显示无法解析主机名什么意思,我开了我的世界服务器可为什么它出现无法解析主机名...
  15. 20-Netty TCP 粘包和拆包及解决方案
  16. 一元二次方程abc决定什么_二次函数中的a,b,c各决定什么?
  17. 运用PS扭曲滤镜 将书法贴在人体上
  18. Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的最好解决办法。
  19. node+express+mysql搭建一个系统
  20. Spring Boot 接入钉钉扫码登录

热门文章

  1. php 活动报名,phpcms 活动报名功能详解一 【原创】
  2. php qq接收不了,PHP-利用curl 与php实现qq挂机遇到不能下线问题
  3. Java企业级应用软件开发
  4. jmeter参数化区别和使用
  5. 罗技鼠标在中国做的真是差
  6. 完整HTML实例网页代码(4)
  7. python标识符最大可能长度_Opencv-Python学习笔记(二)
  8. nonlocal用法
  9. 实验一 HTML编程基础和Javascript编程基础
  10. unity Nav 分层寻路