3Sum:带重复数组中取三个元素求和为零
来源:互联网 发布:淘宝全球购店怎么开 编辑:程序博客网 时间:2024/06/18 11:55
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],A solution set is:[ [-1, 0, 1], [-1, -1, 2]]思路:第一反应深度优先遍历,但是有重复元素,所以需要排序后每次从非重复元素开始,以其之后的范围的元素为窗口扫描,找出满足题意的三个元素。
时间复杂度:O(N^2)
class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> list = new ArrayList<>(); Arrays.sort(nums); for(int a = 0;a<nums.length-2;a++){ if(a==0||nums[a]!=nums[a-1]){//去重 int sum = nums[a]; int l = a+1; int r = nums.length-1; while(l<r){ if((sum+nums[l]+nums[r])==0){ list.add(new ArrayList<Integer>(Arrays.asList(nums[a],nums[l],nums[r]))); while(l<r&&nums[l]==nums[l+1])l++; while(l<r&&nums[r]==nums[r-1])r--; l++;//多挪一个位置,彻底放弃重复元素 r--; }else if((sum+nums[l]+nums[r])>0){ r--; }else{ l++; } } } } return list; }}
阅读全文
0 0
- 3Sum:带重复数组中取三个元素求和为零
- 4Sum:带重复数组取值求和
- 3Sum(数组中三个数之和为零)
- Combination Sum:非重复数组中选取若干元素求和等于给定值
- LeetCode 15. 3Sum -- 数组中某三个元素之和为0,输出这三个元素的值,且这个三元组唯一
- 找出求和为0的三个数 3sum
- Combination Sum II:允许重复的数组中选取若干元素使和为某一给定值
- 在数组中,求和为定值的元素组合
- leetcode_15. 3Sum-求数组中三个数和为0
- 查找数组中3个相加和为零的元素
- 数组中寻找和为sum的两个元素
- 找出数组中重复次数为2的元素,
- 寻找数组中三个数求和为0的组合(naive edition)
- LeetCode 3Sum 三个数和为零的集合 C++完整程序
- 找出序列中求和最接近于target的三个数 3Sum Closest
- 删除数组中重复元素
- 去除数组中重复元素
- 找数组中重复元素
- 不想去读spring庞大源码,欲了解其内部原理来读此文
- RabbitMQ入门教程(四):工作队列(Work Queues)
- Makefile的规则
- hash 图像检索方法汇总
- Servlet笔记
- 3Sum:带重复数组中取三个元素求和为零
- 由主页界面引出的几个知识点(二)
- neo4j图数据库导入scv文件
- 几种边缘检测微分算子的比较
- 关于C语言数组
- 约瑟夫排列(c/python)
- AngularJS,html,css,js技术
- hibernate和mybatis的区别,留着好学习,转载的奥
- Maven搭建SSM框架测试HTTP 接口