这道题采用双指针
class Solution {
public int threeSumClosest(int[] nums, int target) {
for (int m = 0; m < nums.length; m++) {
for (int n = nums.length - 1; n > m; n--) {
if (nums[n] < nums[m]) {
int tmp = nums[n];
nums[n] = nums[m];
nums[m] = tmp;
}
}
}
int sum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.length - 2; i++) {
int j = i + 1;
int k = nums.length - 1;
while (j < k) {
if (Math.abs(nums[i] + nums[j] + nums[k] - target) < Math.abs(sum - target)) {
sum = nums[i] + nums[j] + nums[k];
}
if (nums[i] + nums[j] + nums[k] == target) {
return sum;
}else if (nums[i] + nums[j] + nums[k] > target) {
k--;
}else {
j++;
}
}
}
return sum;
}
}
双指针原理:通过两个指针分别指向两个位置,然后通过条件移动指针。指针的移动就是根据条件过滤掉元素组合的过程。