3sum, 3sum closest
[抄题]:
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.
[思维问题]:
[一句话思路]:
化成和为0 - nums[i]的两根指针2sum
[输入量特别大怎么办]:
[画图]:
[一刷]:
- 记得第一步就写排序
- corner case反正都是空的,直接return res自己就行。
- 防止重复判断时必须要写(i > 0 && nums[i] != nums[i - 1]),因为i - 1最后一位是0。
- 下次不要定义value了,因为value随指针的改变而不断变化。
- List<List<Integer>> res = new ArrayList<List<Integer>>(); 只有最右边是空的。
- 循环条件是for (int i = 0; i < nums.length; i++),上界还是i < nums.length
[总结]:
不要定义value
记得先排序
[复杂度]:
[英文数据结构,为什么不用别的数据结构]:
用linkedlist: 3sum的元素个数不确定,需要动态添加
[其他解法]:
[题目变变变]:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new LinkedList<>();
if (nums == null || nums.length < 3) {
return res;
}
Arrays.sort(nums);//!!!
for (int i = 0; i < nums.length; i++) {
int left = i + 1;
int right = nums.length - 1;
int sum = 0 - nums[i];
if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
while(left < right) {
if (nums[left] + nums[right] == sum) {
res.add(Arrays.asList(nums[i],nums[left],nums[right]));
while(left < right && nums[left] == nums[left + 1]) {
left++;
}
while(left < right && nums[right] == nums[right - 1]) {
right--;
}
left++;
right--;
}
else if (nums[left] + nums[right] < sum) {
left++;
}
else {
right--;
}
}
}
}
return res;
}
}
3sum closest
[抄题]:
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
[思维问题]:
用diff做要判断两边,很麻烦。
[一句话思路]:
用abs绝对值函数,直接就两边比较大小。
[输入量特别大怎么办]:
[画图]:
[一刷]:
用了指针的变量,要放在发生指针变化的循环体之内。
[总结]:
注意用了指针的变量
[复杂度]:
[英文数据结构,为什么不用别的数据结构]:
[其他解法]:
[Follow Up]:
[题目变变变]:
2sum closest 4...
class Solution {
public int threeSumClosest(int[] nums, int target) {
if (nums.length < 3 || nums == null) {
return -1;
}
Arrays.sort(nums);
int bestSum = nums[0] + nums[1] + nums[2];
for(int i = 0; i < nums.length; i++) {
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (Math.abs(sum - target) < Math.abs(bestSum - target)) {
bestSum = sum;
}
if (sum == target) {
while(left < right && nums[left] == nums[left + 1]) {
left++;
}
while(left < right && nums[right] == nums[right - 1]) {
right--;
}
left++;
right--;
}
else if (sum < target) {
left++;
}
else {
right--;
}
}
}
return bestSum;
}
}
3sum, 3sum closest的更多相关文章
- LeetCode:3Sum, 3Sum Closest, 4Sum
3Sum Closest Given an array S of n integers, find three integers in S such that the sum is closest t ...
- LeetCode之“散列表”:Two Sum && 3Sum && 3Sum Closest && 4Sum
1. Two Sum 题目链接 题目要求: Given an array of integers, find two numbers such that they add up to a specif ...
- LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结
前言: 这几天在做LeetCode 里面有2sum, 3sum(closest), 4sum等问题, 这类问题是典型的递归思路解题.该这类问题的关键在于,在进行求和求解前,要先排序Arrays.sor ...
- [LeetCode] 3Sum Closest 最近三数之和
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- Leetcode 16. 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- 16. 3Sum Closest
题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...
- Leetcode 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- No.016:3Sum Closest
问题: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...
- 6.3Sum && 4Sum [ && K sum ] && 3Sum Closest
3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a ...
随机推荐
- python 文本或句子切割,并保留分隔符
网上找了好久,都没有理想的解决方法.主要思想,利用正则表达式re.split() 分割,同时利用re.findall() 查找分隔符,而后将二者链接即可. # coding: utf- import ...
- Linux性能分析 vmstat基本语法
vmstat vmstat 统计虚拟内存信息,可以对操作系统的proc.memory.CPU.IO等信息进行统计以呈现给用户. 根据操作系统的不同,vmstat的输出结果会有不同.大家可 ...
- nodejs基础: 如何升级Noejs版本
Node.js的开发非常活跃,它的最新稳定版本也频繁变化,你不时会发现,一个模块不能在你当前的Node版本上使用,此时你需要升级Node 幸运的是,可以用一种非常简单的方法来管理你的Node版本,即使 ...
- 2018ICPC网络赛(焦作站)E题题解
一.题目链接 二.题意 给定一棵树,有四种操作: $1\ u\ v\ x$:把节点$u$到$v$路径上的所有点的权值乘以$x$: $2\ u\ v\ x$:把节点$u$到$v$路径上的所有点的权值加上 ...
- 【Python编程:从入门到实践】chapter9 类
chapter9 类 9.1 创建和使用类 9.1.1 创建Dog类 class Dog(): """一次模拟小狗的简单尝试""" def ...
- QQ去除聊天框广告详解——2016.9 版
QQ聊天框广告很烦人,百度出来的一些方法早已过时,下面是博主整理出来的方法,供各位同学参考. 1.按键盘上的 Win+R 快捷键打开运行框,然后复制并粘贴 Application Data\Tence ...
- svn完整搭建
安装软件 # yum install httpd mod_dav_svn subversion mod_ssl 查看是否安装成功 #svn --version 如果出现版本号如 则说明svn安装成 ...
- html:模板
http://www.mycodes.net/code_previewmap.php?id=3461 http://www.17sucai.com/pins/4120.html 欧美风格的CMS企业 ...
- c# 导入导出excel表格式
c#使用代码导入excel时,当遇到纯数字且大于15位时会出现编码混乱(表现为科学计数法),要想呈现与excel表中纯数字格式和在数据库中呈现纯数字,操作如下: 完成即可. 导出取决于导入的内容排版.
- Security4.1.3实现根据请求跳转不同登录页以及登录后根据权限跳转到不同页配置
参考博客:https://blog.csdn.net/honghailiang888/article/details/53765508