给你一个整数数组 nums 和一个整数 target 。
请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。
由于答案可能很大,请将结果对 10^9 + 7 取余后返回。
首先将数组排序,因为该题处理子序列过程只是计数,和顺序无关。
class Solution:
def numSubseq(self, nums: List[int], target: int) -> int:
mod=int(10**9+7)
nums.sort()
pows = [1]
for _ in range(len(nums)):
pows.append(2*pows[-1]%mod)
i = 0
ans = 0
j = len(nums) - 1
while True:
if i>=len(nums) or 2*nums[i]>target:
break
while j>i and nums[i]+nums[j]>target:
j-=1
ans=(ans%mod+int(pows[j-i])%mod)%mod
i+=1
return ans