My code:
public class Solution {
public int threeSumSmaller(int[] nums, int target) {
int ret = 0;
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
int begin = i + 1;
int end = nums.length - 1;
int tar = target - nums[i];
while (begin < end) {
int sum = nums[begin] + nums[end];
if (sum < tar) {
ret += end - begin;
begin++;
}
else {
end--;
}
}
}
return ret;
}
}
一開始我是拿brute force來求解的。
后來突然想起來了可以排序。然后這個做法就自然而然出來了。
reference:
https://leetcode.com/articles/3sum-smaller/
還有種做法就是用binary search,
定住 i,j, binary search k so that nums[k] < target - nums[i] - nums[j]
find the biggest k
注意這里寫binary search, mid = (begin + end + 1) / 2;
以防止進入死循環。
Anyway, Good luck, Richardo! -- 09/05/2016