题目链接:https://leetcode-cn.com/problems/4xy4Wx/
思路:从小到大排序,然后用两个指针,一个指向第一个数(i),一个指向最后一个数(j),然后往中间聚合即可。统计结果每次加j-i是因为当nums[i]+ums[j]<=target的时候,nums[i]+nums[j] j∈(i+1,j) 这些组合都满足(因为一开始从小到大排序了)。
上代码:
class Solution {
public int purchasePlans(int[] nums, int target) {
int result = 0;
Arrays.sort(nums);
for (int i = 0, j = nums.length - 1; i < j; ) {
if (nums[i] + nums[j] <= target) {
result += j - i;
i++;
} else {
j--;
}
result %= 1000000007;
}
return result;
}
}