15.3 Sum
来源:互联网 发布:人工智能语言 编辑:程序博客网 时间:2024/06/06 11:18
3 Sum
题目
给定一个具有n个整数的数组S,问在S中是否存在这样的元素a, b, c满足 a + b + c = 0?找到数组中所有的满足和为零的特有三元素。
注:答案集中不能包含重复的三元素。
比如,给定数组 S = [-1, 0, 1, 2, -1, -4],
答案集为:
[
[-1, 0, 1],
[-1, -1, 2]
]
代码块
class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> result = new ArrayList<List<Integer>>(); //建立一个列表的列表 Arrays.sort(nums);//排序 int i = 0 ; for( i = 0; i < nums.length - 2; i++){ if(i != 0 && nums[i] == nums[i-1]){ continue; //去除重复的元素 } int j = i + 1; int k = nums.length - 1; while(j < k && j< nums.length - 1){ List<Integer> temp = new ArrayList<Integer> (); if(nums[i] + nums[j] + nums[k] < 0){ j++; }else if(nums[i] + nums[j] + nums[k] > 0){ k--; }else{ temp.add(nums[i]); temp.add(nums[j]); temp.add(nums[k]); result.add(temp); j++; k--; while(j < k && nums[j] == nums[j-1]){ j++; //j与它前一个元素相等否 } while(j < k && nums[k] == nums[k+1]){ k--;//k与后一个元素相等否 } } } } return result; }}
代码分析
第一步,对数组进行排序;(java中具有自动排序功能,可以直接调用Array**s** .sort 记着加s ,然后进行补全)
第二步,进行查找。再看i是否满足条件。
进入循环:length-2 是为了保证j,k不越界(i控制条件是与前一个元素不相等);
然后给j,k 赋初值(j=i+1;k=length-1)。
满足第二层循环条件的话(j 是否满足条件j<k,j小于length-1),
- 1.再将j后移(小于0);
- 2.k前移(大于0);
- 3.相等的话添加到列表内,并进行jk移位,以及去重。
第三步,返回结果。
因为使用了排序,以及两个循环。所以算法复杂度,O(nlogn+n^2)→O(n^2)。
阅读全文
0 0
- 15.3Sum
- 15.3Sum
- 15.3sum
- 15.3Sum
- 15.3Sum
- 15.3Sum
- 15.3Sum
- 15.3 Sum
- 15.3Sum
- 15.3Sum &16.3Sum Closest
- [LeetCode]15.3Sum
- LeetCode 15.3Sum
- Algorithms—15.3Sum
- [Leetcode] 15.3Sum @python
- LeetCode-15.3Sum
- Leetcode||15.3Sum
- 15.3sum leetcode(array)
- [LeetCode]15.3Sum
- Spring mvc中@RequestMapping 6个基本用法小结
- CacheManager原理剖析与源码分析
- Linux常用的命令的集锦
- Hue配置MySQL查询的时候提示找不到libmysqlclient.so(ubuntu环境下)
- Struts2文件上传 超过大小限制无法跳转至指定input页面问题。浏览器提示连接已重置问题
- 15.3 Sum
- Cannot format given Object as a Number
- linux下最好用的视频播放器,mplayer,smplayer怎么安装 播放黑屏
- 模拟地与数字地
- Windows下安装python版的XGBoost(Anaconda)
- 自组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map)
- 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器
- C++对传参合传返回值时构造的优化处理
- python里使用正则表达式的group()函数访问分组的结果