1. 三数之和

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

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

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
*   注意整型超过127后直接 == 会出错
*   Arrays也有对数组的排序函数
**/
class Solution {public List<List<Integer>> threeSum(int[] nums) {return graceSolution(nums);}public List<List<Integer>> graceSolution(int[] nums) {// 特殊情况if (nums == null || nums.length < 3)return new ArrayList<>();//排序数组,只有排序后可以利用双指针移动的方式来达到目标值List<Integer> numsList = Arrays.stream(nums).boxed().collect(Collectors.toList());Collections.sort(numsList);ArrayList<List<Integer>> res = new ArrayList<>();//如果第一个元素都大于零直接返回空if (numsList.get(0) > 0) return res;ArrayList<Integer> temp = null;//固定i 然后利用R L指针来获取目标值(盛最多的水)for(int i = 0; i < numsList.size(); i++) {int l = i +1;int r = numsList.size() - 1;//如果当前元素都大于0了就不可能有结果了if(numsList.get(i)>0)return res;//如果当前元素有重复元素就可以直接跳过if(i>0 && numsList.get(i).equals(numsList.get(i - 1)))continue;while(l < r) {int curNum = numsList.get(i) + numsList.get(l) + numsList.get(r);if (curNum == 0) {temp = new ArrayList<>();temp.add(numsList.get(i));temp.add(numsList.get(l));temp.add(numsList.get(r));res.add(temp);//如果当前已经符合要求,那么当前l和r对应位置的值都不能再使用了,避免重复while(l < r && numsList.get(l).equals(numsList.get(l + 1)))l++;while(l < r && numsList.get(r).equals(numsList.get(r - 1)))r--;l++;r--;}else if (curNum > 0) {// 如果结果大于0, 那么需要将r--才可能使得结果减少,因为目前数组已经排序r--;}elsel++;}}return res;}public List<List<Integer>> other(int[] nums) {List<List<Integer>> lists = new ArrayList<>();//排序Arrays.sort(nums);//双指针int len = nums.length;for(int i = 0;i < len;++i) {if(nums[i] > 0) return lists;if(i > 0 && nums[i] == nums[i-1]) continue;int curr = nums[i];int L = i+1, R = len-1;while (L < R) {int tmp = curr + nums[L] + nums[R];if(tmp == 0) {List<Integer> list = new ArrayList<>();list.add(curr);list.add(nums[L]);list.add(nums[R]);lists.add(list);while(L < R && nums[L+1] == nums[L]) ++L;while (L < R && nums[R-1] == nums[R]) --R;++L;--R;} else if(tmp < 0) {++L;} else {--R;}}}return lists;}
}

【LeetCode15】三数之和相关推荐

  1. LeetCode15. 三数之和 16. 最接近的三数之和

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

  2. [Swift]LeetCode15. 三数之和 | 3Sum

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. leetcode15. 三数之和(三指针)

    一:题目 二:思路 1.这里的去重是指的是我们在遍历元素的时候,遇到相同的挨着的相同的元素的时候要跳过 2.对元素进行排序,为了后面的比较 3.我们用的是三个指针,第一个指针i指向第一个元素,第二个指 ...

  4. leetcode15 三数之和

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

  5. leetcode15. 三数之和(详解)

    一:题目 二:上码 class Solution {public:/**思路:1.这个题出其不意之处在于,其先对这个序列进行了排序排序的好处是1>:如果首元素是大于0的,那么如果无论无何也凑不出 ...

  6. Leetcode--15. 三数之和

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

  7. [230420 leetcode15] 三数之和

    题目描述 原题链接 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums ...

  8. LeetCode--15.三数之和

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

  9. LeetCode 15. 三数之和(3Sum)

    15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...

最新文章

  1. 换个角度聊系统稳定性建设
  2. T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响...
  3. 计算机科学与技术社会实践报告,计算机科学与技术系社会实践报告
  4. 连续 3 天,企业容器应用实战营上海站来啦!
  5. 海上瓶子下有东西吗_小小的瓶盖竟有如此大的作用, 闻名不如眼见, 你知道吗?...
  6. 怎么给自己的python换源_windows/linux下如何更换Python的pip源
  7. 我的物联网项目(十二) 单体应用架构不行?
  8. 黄聪:VS2017调试时提示“运行时无法计算表达式的值”
  9. 如何制作一个塔防游戏 Cocos2d x 2 0 4
  10. oracle 存储结构 语法 第一阶段
  11. 自动化运维工具SaltStack
  12. 此工作簿已丢失了其VBA项目 Activex控件以及其他任何与可编程序性相关的功能...
  13. BZOJ3687 简单题
  14. java获取pdf的属性_Java 文件属性.pdf
  15. 已知两点坐标和半径,求圆心
  16. 计算机中1kb等于多少字节,1kb等于多少个字节
  17. 新知实验室--腾讯云TRTC体验
  18. 20 周年会上的这条视频,看哭了 10 万阿里人
  19. 台湾BSMI认证的三种申请方式及产品
  20. u盘文件变成快捷方式怎么恢复,恢复U盘文件的五种方法

热门文章

  1. Linux平台屏幕录像工具RecordMyDesktop
  2. 第三章 软件构造过程与配置管理
  3. 任务卡_03-Java核心类库_第2节 常用类库
  4. asp.net967-基于.NET的健身会所管理系统
  5. Word、WPS中表格的第一行和第二行中间间距,如何去掉,使得跟其他行间距相同
  6. 将视频分割成多段,并将视频中的音频进行单独保存
  7. Linux的命令大全--转载的
  8. aba会导致问题_CAS的ABA问题有什么危害?
  9. 源码泄露是裁员报复还是程序员反抗 996?
  10. 【优先队列】HDU1434幸福列车