15. 3Sum(Array)

对数组的每一个数进行遍历,从这个数之后的数字中找出两个的sum等于这个数的相反数。找出这两个数的方法是从剩下list的两端开始查找,要是两端也就是lo+hi < sum的话lo就往前进一位。这中间也要注意的时,因为不能有重复,因此在找到一组相等的之后要判断lo跟lo+1是否一样,一样的话就要lo++,对hi也是同理。

 1 class Solution {
 2     public List<List<Integer>> threeSum(int[] nums) {
 3         List<List<Integer>> res = new ArrayList<> ();
 4         Arrays.sort(nums);
 5         for(int i = 0; i < nums.length - 2; i++) {
 6             if(i == 0 || (i > 0 && nums[i] != nums[i-1])) {
 7                 int lo = i + 1, hi = nums.length - 1, sum = 0 - nums[i];
 8                 while(lo < hi) {   //要记得循环
 9                     if(nums[lo] + nums[hi] == sum) {
10                         res.add(Arrays.asList(nums[i], nums[lo], nums[hi]));
11                         while(lo < hi && nums[lo] == nums[lo + 1]) lo++; // lo < hi要放在第一个,因为例如[0, 0, 0]时
12                         while(lo < hi && nums[hi] == nums[hi - 1]) hi--; //最后一个会out of index bound,先判断lo < hi就没关系
13                         lo++;
14                         hi--;
15                     }else if(nums[lo] + nums[hi] < sum) {
16                         lo++;
17                     }else {
18                         hi--;
19                     }
20                 }
21             }
22         }
23         return res;
24     }
25 }

原文地址:https://www.cnblogs.com/goPanama/p/9393765.html

时间: 2024-08-29 10:21:55

15. 3Sum(Array)的相关文章

Leetcode 15. 3Sum(python)

先排序,再循环遍历,用双指针. class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ solution=[] nums.sort() for i in range(len(nums)-1): left=i+1 right=len(nums)-1 while left<right: val=

JS数组(Array)操作汇总

1.去掉重复的数组元素.2.获取一个数组中的重复项.3.求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节.4.判断一个字符串中出现次数最多的字符,统计这个次数.5.数组排序. 6.快排. 7.删除/添加数组项. 8.数组随机顺序输出. 9.数组求和.最大值. 10.判断是否为数组. 11.冒泡排序. 1.去掉重复的数组元素. Array.prototype.unique = function() { var ret = []; var o = {}; for(var i

从零开始学习R语言(四)——数据结构之“数组(Array)”

本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/60141207 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/12567789.html 4. [三维+]:数组(Array) R语言中数组可以看做是矩阵的扩展,它将矩阵扩展到2维以上.如果给定的数组是1维的则相当于向量,2维的相当于矩阵.R语言中的数组元素的类型也是单一的,可以是数值型,逻辑型,字符型或复数型等. R语言中数组的使用 4.1 数组的创建 语法:array

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

.net框架-数组(Array)&amp; ArrayList &amp; List

数组(Array)特点: 初始化时规定长度 元素类型相同 数据存储连续,效率高 System.Collections.ArrayList : 初始化时无需规定长度,长度随存储的数据动态扩充与收缩 元素类型可以不相同,其内部使用object[]实现数据存储,因此会数据读写时会频敏装箱.拆箱从而影响效率 继承接口:IList.ICollection.IEnumerable.ICloneable,数据增.删.改查十分方便 System.Collections.Generic.List<T>: 范型类

加速数组操作(Array)

Measure-Command { $ar = @() for ($x=0; $x -lt 10000; $x++) { $ar += $x } }执行结果:3.301s Measure-Command { $ar = New-Object -TypeName System.Collections.ArrayList for ($x=0; $x -lt 10000; $x++) { $ar.Add($x) } }执行结果:0.047s From:http://powershell.com/cs/

56. C# -- 数组(Array)

理论: C# 数组(Array) 数组是一个存储相同类型元素的固定大小的顺序集合. 数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合. 声明数组变量并不是声明 number0.number1.....number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0].numbers[1].....numbers[99] 来表示一个个单独的变量. 数组中某个指定的元素是通过索引来访问的 所有的数组都是由连续的内存位置组成的.最低的地址对应

java基础-引用数据类型之数组(Array)

java基础-引用数据类型之数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 原文地址:https://www.cnblogs.com/yinzhengjie/p/8719728.html

python3之数组(array)

当我们需要1000万个浮点数的时候,数组(array)的效率要比列表(list)要高得多,因为数组在背后存的并不是float对象,而是数字的机器翻译,也就是字节表述.这一点和c语言中的数组一样. 再比如说,如果需要频繁对序列做先出先进的操作,collection.deque(双端队列)的速度应该会更快. 1.数组 如果我们需要一个只包含数字的列表,那么array.array比list更高效.数组支持所有跟可变序列有关的操作,包括.pop,.insert和.extend. 另外,数组还提供从文件读