题目链接
https://leetcode-cn.com/problems/4xy4Wx/
题目描述
小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。
注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1。
示例
输入:nums = [2,2,1,9],target = 10
输出:4
符合预算的采购方案如下:
nums[0] + nums[1] = 4;
nums[0] + nums[2] = 3;
nums[1] + nums[2] = 3;
nums[2] + nums[3] = 10;
解题思路
这道题求的是nums中和不超过target的两个元素的组合数。在最开始双重循环遍历可能的元素组合会导致TLE,如果要降低复杂度可以用双指针。
首先对nums进行升序排序,然后我们需要利用数组升序的特点。初始化left = 0,right = len(nums)-1。如果nums[left] + nums[right] > target,right需要左移;如果找到右指针right使得nums[left] + nums[right] <= target,那么[left+1