LetCode 15 三数之和
提示
LintCode中的相关算法题实现代码,可以在我的GithHub中下载。
题目需求
给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [[-1, 0, 1],[-1, -1, 2] ]
解题思路
一开始想的非常简单,三个遍历,满足条件的放入一个List,然后再将这个List与已有的满足条件的List进行比较,看看有没有元素相同的,有的话不加入。
显然这样会超时, 因为三个循环太费时,时间复杂度,再加上比较当前满足条件的集合,更加费时。
我们可以先将原数组从小到大排序,固定其中两个元素 i 和 j,i从前往后走,j从后往前走,i 每往后一个,将 j 重置为数组末尾的下标,在 i 和 j 之间找使nums[i] + nums[j] + nums[k] == 0成立的k。
那么如何去重呢?
每次得出nums[i] + nums[j] + nums[k] == 0成立的i、j、k之后,令 i 往后走,直到nums[i] != nums[i + 1],并令 j 向前走,直到nums[j] != nums[j - 1]。这样就能保证得到的三个数字不会有重复。下面是代码
实现代码
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < nums.length; i++) {if (nums[i] > 0) break;if (i > 0 && nums[i] == nums[i - 1]) continue;int j = nums.length - 1;int target = 0 - nums[i];int k = i + 1;while (k < j) {if (nums[k] + nums[j] == target) {List<Integer> item = Arrays.asList(nums[i], nums[k], nums[j]);result.add(item);while (k < j && nums[k] == nums[k + 1]) k++;while (k < j && nums[j] == nums[j - 1]) j--;k++;j--;} else if (nums[k] + nums[j] < target) {k++;} else {j--;}}}return result;}
}
LetCode 15 三数之和相关推荐
- Leetcode python《热题 HOT 100》15. 三数之和
Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...
- 15. 三数之和 golang
15. 三数之和 给你一个包含 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 ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- Suzy找到实习了吗Day 7 | 哈希表结束啦 454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和
454. 四数相加 II(dict hash) 题目 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...
- 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和
代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...
- 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结
LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...
- 15 三数之和(2021-07-09)
15. 三数之和 链接:https://leetcode-cn.com/problems/3sum/ 题目描述见链接内容. 解法1:三重循环+HasH去重 想不到什么好的思路,于是就笨方法开干,用三种 ...
- 【LeetCode 算法】15.三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...
最新文章
- (转)Vix_API 操作 VMware
- php ci hooks,CI框架 -- 核心文件 之 Hooks.php
- (转)upper_bound()与lower_bound()使用方法
- 11、InnoDB存储引擎
- MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解
- MySQL了content函数_MySql字符串函数使用技巧
- 2013年7月28日web前端学习笔记-------head相关标签应用
- IDEA 变量下面多了一根下划线
- 电商3.0:构建互利共赢的生态圈
- Windws Server 2012 Server Backup(备份与还原)
- 机器学习(一) Eviews下载及安装教程
- android 设置路由器,安卓手机如何设置无线路由器 实现WiFi上网
- 6 个常用的 API 接口在线管理平台
- Halcon轮廓提取
- Scratch基础教学之孙悟空的吹毛变猴
- mysql 根据经纬度查询距离
- dayjs获取当月的下月的第一天时间
- win7系统 无法安装.Net 4.7版本解决方案
- 计算广告第一章——在线广告综述
- 巧克力html模版,PH配方【巧克力夏洛特chocolate Charlotte】