题目:三数之和 II
2015-08-22 00:46
337 查看
给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和。
例如S = [-1, 2, 1, -4] and target = 1. 和最接近1的三元组是 -1 + 2 + 1 = 2.
注意
只需要返回三元组之和,无需返回三元组本身
标签 Expand
您在真实的面试中是否遇到过这个题?
Yes
样例
相关题目 Expand
思路:与三数之和的思路一致
例如S = [-1, 2, 1, -4] and target = 1. 和最接近1的三元组是 -1 + 2 + 1 = 2.
注意
只需要返回三元组之和,无需返回三元组本身
标签 Expand
您在真实的面试中是否遇到过这个题?
Yes
样例
相关题目 Expand
思路:与三数之和的思路一致
public class Solution { /** * @param numbers: Give an array numbers of n integer * @param target : An integer * @return : return the sum of the three integers, the sum closest target. */ public int threeSumClosest(int[] numbers ,int target) { // write your code here if(null==numbers||0==numbers.length) return Integer.MIN_VALUE; int min = Integer.MAX_VALUE; int dif = 0; int res = 0; //先排序,可以选择更加优秀的排序方式比如快排,合并等 for(int i=0;i<numbers.length;i++){ for(int j=i;j<numbers.length;j++){ if(numbers[i]>numbers[j]){ int tmp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = tmp; } } } //a+b+c = 0 ; b+c = -a,就相当于求2者的和,用2个指针分别指向排序好的数组,需要去判断唯一性 //a,b,c 若与前一个元素的一致则跳过 for(int i=0;i<numbers.length;i++){ if(i>=1){ if(numbers[i] == numbers[i-1]){ continue; } } int s = i+1; int e = numbers.length-1; while(s<e){ if(s>i+1&&numbers[s]==numbers[s-1]){ s++; continue; } if(e<numbers.length-1&&numbers[e-1]==numbers[e]){ e--; continue; } dif = numbers[s]+numbers[e]+numbers[i]-target; if(min>Math.abs(dif)){ min = Math.abs(dif); res = target+dif; } if(dif>0){ e--; }else{ s++; } } } return res; } }
相关文章推荐
- LeetCode "Paint House"
- HDU 5416 CRB and Tree(dfs 异或逆运算)
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+BIO
- Clean Code(三):注释
- 题目:三数之和
- 题目:N皇后问题 II
- 很高兴加入写博客的行列,慢慢记录自己的一点点进步
- LeetCode ||Count Primes
- 微信抢红包源码
- 单例模式(Singleton)
- table表格css样式
- 随手记
- NBUT 1449 Annie (模拟)
- 202 Happy Number
- HDOJ5256 序列变换(dp)
- Python pip – error: invalid command ‘bdist_wheel’
- JQuery选择器操作
- 兄弟间的事,筹栎间的那点事
- Sublime Text 快捷键
- 摩天大厦不可伸缩