3Sum Smaller
题目链接:https://leetcode.com/problems...
sort,从小到大排序
固定第一个数字index = i,从后面的数字里选第二个第三个
-
后两个数字,用2 points来找,从j = i + 1, k = len() - 1开始:
if n[j] + n[k] < target - n[i]: count += (k-i), j++
因为所有(j+1, k)之间的数和n[j]组合都< target - n[i]if n[j] + n[k] >= target - n[i]: k--
public class Solution {
public int threeSumSmaller(int[] nums, int target) {
if(nums == null || nums.length < 3) return 0;
// sort first
Arrays.sort(nums);
/* enumerate 1st num: k
* 2 points find 2nd, 3rd
* initial: i = k + 1, j = len(nums) - 1
* case 1: n[i] + n[j] < target - n[k]: count += j - i, i++
* case 2: > : j--
*/
int count = 0;
for(int k = 0; k < nums.length - 2; k++) {
int i = k + 1, j = nums.length - 1;
while(i < j) {
if(nums[i] + nums[j] >= target - nums[k]) j--;
else {
count += j - i; i++;
}
}
}
return count;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。