Two sum closet
這題可以用 two pointer 做,不難,但考點在於他是要求「絕對值」,所以要用 Math.abs
去算
首先先 sort,然後用 two pointer 從兩旁開始,每次都去計算 Math.abs(target-sum)
,
如果比之前都小則記錄起來用在下個回圈做比較,
最後返回 min
迴圈地方要注意如果是用 left+1 != right
要記得最最後確認
public int twoSumClosest(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return 0;
}
Arrays.sort(nums);
int n = nums.length;
int left = 0, right = n-1, sum = 0;
int min = Integer.MAX_VALUE;
while (left+1 != right) {
sum = nums[left] + nums[right];
if (Math.abs(target - sum) < min) {
min = Math.abs(target - sum);
}
if (sum == target) {
return 0;
} else if (sum > target) {
right--;
} else {
left++;
}
}
if (min < Math.abs(target-nums[left]-nums[right]))
return min;
return Math.abs(target-nums[left]-nums[right]);
}