LeetCode 1498 满足条件的子序列数目

    技术2024-01-13  108

    给你一个整数数组 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

     

    Processed: 0.010, SQL: 9