LCP 28. 采购方案
- 题号:力扣LCP28
- 知识点:双指针,二分查找
- 目标完成度:37/150
- 总结
题干:
双指针:
- 相似题目:LCP 18. 早餐组合
- 1.首先对数组排序
- 2.
left
指向数组的头部,right
指向尾部 - 3.与LCP 18不同的是,这里只有一个数组,
while
循环的条件为left<right
,仅在left
后查找,可以避免重复计数。当left
和right
为两个数组时,while
循环的条件为left<len(staple) and right>=0
。 - 4.也可以使用二分查找,大体思路是使用一层循环从前往后遍历,在循环内使用查找不超过预算的右边界。
# python3 双指针
class Solution:
def purchasePlans(self, nums: List[int], target: int) -> int:
nums.sort()
m = len(nums)
left = 0
right = m - 1
ans = 0
while left<right:
if nums[left] + nums[right] <= target:
ans += (right - left)
left += 1
else:
right -= 1
return (ans)%1000000007