LeetCode 15. 三数之和【双指针】
15. 三数之和
输入: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] <= 10^5
class Solution {/*** 双指针 O(n^2)* 首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。* 依然还是在数组中找到 abc 使得a+b+c=0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。* 接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。* 如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。*/public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);// 找出a + b + c = 0// a = nums[i], b = nums[left], c = nums[right]for (int i = 0; i < nums.length; i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) return res;// 错误去重a方法,将会漏掉-1,-1,2 这种情况//if (i + 1 < nums.length && nums[i] == nums[i + 1]) continue;// 正确去重a方法if (i - 1 >= 0 && nums[i] == nums[i - 1]) continue;int l = i + 1, r = nums.length - 1;while (l < r) { // 不能等于,等于的换凑不出三个数为一组// 去重复逻辑如果放在这里,0,0,0 的情况,可能直接导致 right<=left 了,从而漏掉了 0,0,0 这种三元组//while (l < r && nums[r] == nums[r - 1]) r--;//while (l < r && nums[l] == nums[l + 1]) l++;if (nums[i] + nums[l] + nums[r] > 0) r--;else if (nums[i] + nums[l] + nums[r] < 0) l++;else {res.add(Arrays.asList(nums[i], nums[l], nums[r]));// 去重逻辑应该放在至少找到一个三元组之后,再对b和c去重while (l < r && nums[r] == nums[r - 1]) r--;while (l < r && nums[l] == nums[l + 1]) l++;r--; l++;}}}return res;}
}
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < nums.length; i ++ ) {if (i - 1 >= 0 && nums[i] == nums[i - 1]) continue;for (int j = i + 1, k = nums.length - 1; j < k; j ++ ) {if (j > i + 1 && nums[j] == nums[j - 1]) continue;while (j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k -- ;if (nums[i] + nums[j] + nums[k] == 0) {res.add(Arrays.asList(nums[i], nums[j], nums[k]));}}}return res;}
}
LeetCode 15. 三数之和【双指针】相关推荐
- Leetcode 15.三数之和 双指针 or 暴力哈希
题目链接:传送门 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 暴力+ ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- LeetCode 15三数之和16最接近的三数之和
三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- LeetCode 15. 三数之和(3Sum)
15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...
- Java实现 LeetCode 15 三数之和
15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...
- LeetCode 15. 三数之和
题目描述 15. 三数之和 思路 思路1 比较容易想到的就是,求三数之和等于0,可以等价于求两个数的和,然后看这个和的相反数是否在nums里面. 但是 T_T这样的话复杂度太高了,会超时,捂脸,最后三 ...
- Leetcode 15.三数之和
Time: 20190920 Type: Medium 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所 ...
- Leetcode 15:三数之和(最详细解决方案!!!)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. **注意:**答案中不可以包含重 ...
- 2021-5-11 Leetcode 15.三数之和
1.1我的解法以及考虑到的几点问题 1)数组长度小于3的不用考虑,直接返回 2)暴力法:每一次查找不是自己选择的数字,看一下能否凑成零(但是这样不知道如何去重) 3)拆成一个数字+LC 1.两数之和的 ...
最新文章
- ASP.NET MVC5 Entity Framework CodeFirst(代码优先)
- 计算神经网络隐藏层节点数极小值
- SpringBoot+POI实现导入Excel时验证并返回错误Cell标红的文件
- 禁止USB存储设备。
- angular学习笔记(十九)-自定义指令修改dom
- 使用 XML 实现 REST 式的 SOA
- [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
- 【Python爬虫】BeautifulSoup4 库的一些用法
- 大数据时代,你的信息安全谁负责?
- mysql存储过程表迁移for_MySQL存储过程--通过游标遍历和异常处理迁移数据到历史表 (转)...
- 全面剖析Linux库文件路径的添加
- 实现mvcc_数据库中的引擎、事务、锁、MVCC(三)
- 【图像融合】基于matlab GUI小波变换可见光与红外光图像融合(带面板)【含Matlab源码 701期】
- log4j.properties打印日志
- 2021SC@SDUSC Zxing开源代码(十五)PDF417二维码(一)
- Word高效指南 - 中文文档首行自动缩进2个字符
- 零基础学前端难吗?前端好学吗?
- 计算机怎么搜索特定格式文件,win10 查找指定类型文件方法_win10怎么查找指定类型文件-win7之家...
- uni-app的发展和应用
- 24只胡萝卜的管理精神(节录)