给一组整数,问能找出多少对整数,他们的和大于一个给定的目标值。
样例
样例 1:
输入: [2, 7, 11, 15], target = 24
输出: 1
解释: 11 + 15 是唯一的一对
样例 2:
输入: [1, 1, 1, 1], target = 1
输出: 6
挑战
O(1) 额外空间以及 O(nlogn) 时间复杂度
解题思路:
双指针。先排序,一前一后,若两指针指向的值相加不大于target,说明小了,需要将l右移,若大于target,说明从l到r这段距离组合的l与r都能满足条件,直接在结果加上r-l,然后r--,考察稍小一点的元素。
public class Solution {
/**
* @param nums: an array of integer
* @param target: An integer
* @return: an integer
*/
public int twoSum2(int[] nums, int target) {
// write your code here
Arrays.sort(nums);
int i = 0;
int j = nums.length - 1;
int res = 0;
while(i < j){
if(nums[i] + nums[j] <= target)
i++;
else{
res += j - i;
j--;
}
}
return res;
}
}

6884

被折叠的 条评论
为什么被折叠?



