[抄题]:

Given an array S of n integers, are there elements abc 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

[输入量特别大怎么办]:

[画图]:

[一刷]:

  1. 记得第一步就写排序
  2. corner case反正都是空的,直接return res自己就行。
  3. 防止重复判断时必须要写(i > 0 && nums[i] != nums[i - 1]),因为i - 1最后一位是0。
  4. 下次不要定义value了,因为value随指针的改变而不断变化。
  5. List<List<Integer>> res = new ArrayList<List<Integer>>(); 只有最右边是空的。
  6. 循环条件是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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结

    前言: 这几天在做LeetCode 里面有2sum, 3sum(closest), 4sum等问题, 这类问题是典型的递归思路解题.该这类问题的关键在于,在进行求和求解前,要先排序Arrays.sor ...

  4. [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 ...

  5. 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 ...

  6. 16. 3Sum Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

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

  8. 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 ...

  9. 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 ...

随机推荐

  1. centos svn 的搭建

    一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. ...

  2. PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/classname

    php利用PHPExcel类导出导入Excel用法 来源:   时间:2013-09-05 19:26:56   阅读数: 分享到: 16 [导读] PHPExcel类是php一个excel表格处理插 ...

  3. Unreal Engine 4 笔记 2

    转自:http://blog.csdn.net/st_dark/article/details/48005947 2.Actor继承自aactor,可以看成是一个容器,用来装"组件" ...

  4. mysql sleep连接过多解决办法

    睡眠连接过多,会对mysql服务器造成什么影响? 严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃. 造成睡眠连接过多的原因? 1. 使用了太多持久连接(个人觉得,在高并 ...

  5. python的分支循环

    知识内容: 1.if-else分支结构 2.while循环 3.for循环 4.循环结构综述 5.break和continue语句 一.if-else分支结构 1.单分支选择结构 if 表达式: 语句 ...

  6. c++官方文档

    来自官方文档...感谢老王指出需要c++11,一下代码全在c++11下编译,编译参数加入  -std=c++11 #include<stdio.h> #include<iostrea ...

  7. hammer使用: 代码:捏合、捏开、图片放大 的一个手机图片“放大缩小可拖动”的小效果

    hammer.js 的使用. (手机手势插件) 捏合.捏开.图片放大 的一个手机图片“放大缩小可拖动”的小效果. 相关js 到 http://www.bootcdn.cn/  查找和下载. hamme ...

  8. 使用 IIS 过程中遇到的一些问题

    由于我最近开发的 Web 程序多是采用 Python 为主,因此大部分都是部署在 Linux 下的,自然在 Web 服务器上就选择了 Nginx,不过一些纯静态文件的 Web 应用会放在 IIS 下面 ...

  9. 转载:canal数据库同步redis

    ref: http://blog.csdn.net/tb3039450/article/details/53928351

  10. 编写jQuery插件(三)——三个插件例子

    封装jQuery对象方法的插件 表格隔行变色插件 CSS部分: .even{ background:#CCC; } .odd{ background:#666; } .selected{ backgr ...