2017.9.25
做了好几个题了,发现自己刚开始做的求三个数之和的那个题,对数组划分,根本没有什么卵用啊。
这个题只要多增加一个记录最小差的变量就可以了。
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
int res = target;
int min = Integer.MAX_VALUE;
Arrays.sort(numbers);
int length = numbers.length;
for(int i = 0 ; i < length;i++){
// 这里是为了跳过重复的元素
for(int j = i+1; j < length; j++){
for(int h = j+1; h < length; h++){
if(h != length -1 && numbers[h] == numbers[h+1]){
continue;
}
int tmp = numbers[j] + numbers[h] + numbers[i];
if(tmp == target){
return target;
}
if(min > Math.abs(tmp - target)){
min = Math.abs(tmp - target);
res = tmp;
}
while(h != length -1 && numbers[h] == numbers[h+1]){
h++;
}
}
while(j != length -1 && numbers[j] == numbers[j+1]){
j++;
}
}
while(i != length-1 && numbers[i] == numbers[i+1]){
i++;
}
}
return res;
}
}