博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]--15. 3Sum
阅读量:6349 次
发布时间:2019-06-22

本文共 1218 字,大约阅读时间需要 4 分钟。

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]]

给一组数组,要求得出所有和为0的数字组合,要求数字组合不能重复出现,并且按照升序排列。

先对数组进行排序,时间复杂度O(log(n)),然后定好一个数的位置,查找另外两个数的和等于-nums[i]的组合,由于数组排好序了,所以可以从两边往中间走,当结果大于0的时候后边往后退一步,否则前边进一步,时间复杂度O(n^2),所以时间复杂度为O(n^2)。

public List
> threeSum(int[] nums) { List
> res = new ArrayList
>(); int len = nums.length; if (len < 3) return res; Arrays.sort(nums); for (int i = 0; i < len; i++) { if (nums[i] > 0) break; if (i > 0 && nums[i] == nums[i - 1]) continue; int begin = i + 1, end = len - 1; while (begin < end) { int sum = nums[i] + nums[begin] + nums[end]; if (sum == 0) { List
list = new ArrayList
(); list.add(nums[i]); list.add(nums[begin]); list.add(nums[end]); res.add(list); begin++; end--; while (begin < end && nums[begin] == nums[begin - 1]) begin++; while (begin < end && nums[end] == nums[end + 1]) end--; } else if (sum > 0) end--; else begin++; } } return res; }

转载地址:http://fetla.baihongyu.com/

你可能感兴趣的文章
关于网络上java,php和.net的“口角之争“的一点想法 !
查看>>
python 第二周(第十三天) 我的python成长记 一个月搞定python数据挖掘!(21) -正则表达式re...
查看>>
[POI2011]SEJ-Strongbox
查看>>
20文件
查看>>
Android开发Intent应用概述
查看>>
【Go】并发编程
查看>>
VMware虚拟化NSX-Manager命令行更改admin用户密码
查看>>
悦纳自己
查看>>
python字符串函数
查看>>
ORM框架Hibernate (四)MyEclipse Hibernate Tool 逆向生成实体类
查看>>
去掉iphone连接电脑时会出现的弹出窗口
查看>>
【python】-- web开发之HTML
查看>>
vs2015 去除 git 源代码 绑定
查看>>
解决firefox的button按钮文字不能垂直居中
查看>>
网络协议端口号详解
查看>>
大话数据结构读后感——第一章
查看>>
各种排序
查看>>
ts 格式化日期输出
查看>>
Optional
查看>>
sed 命令编辑文本
查看>>