IT编程 > 开发语言 > .net

LeetCode1498. 满足条件的子序列数目

93人参与2020-07-07

题目

给你一个整数数组 nums 和一个整数 target

请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target非空子序列的数目。

由于答案可能很大,请将结果对 10^9 + 7 取余后返回。

思路

排序 + 双指针

将数组从小到大排序, 双指针left指向排好序的第一个元素, right指向最后一个.

首先寻找符合条件的左右端点, 显然nums[left] + nums[right] <= target 时,符合条件, 此时我们统计可以使用的子序列个数为2rl2^{r -l}, 注意每次都默认使用左指针指向的元素. 统计后移动左指针. 这样, 每一次循环子序列不会发生漏记的情况(子序列最小值都是没有使用过的最小值).

代码如下

class Solution:
    def numSubseq(self, nums: List[int], target: int) -> int:
        nums.sort()
        if nums[0] * 2 > target:
            return 0
        MOD = 10 ** 9 + 7
        left = 0
        right = len(nums) - 1
        ret = 0
        while left <= right:
            if nums[left] + nums[right] <= target:
                ret += 2**(right-left)
                ret %= MOD
                left += 1
            else:
                right -= 1
        return ret

本文地址:https://blog.csdn.net/Hoooo_233/article/details/107140413

您对本文有任何疑问!!点此进行留言回复

推荐阅读

猜你喜欢

LeetCode1498. 满足条件的子序列数目

07-07

【Leet-Code】41. 缺失的第一个正数

07-07

Leetcode231. 2的幂

07-07

使用队列在进程中的通信

07-07

cs224n笔记05-探索词向量

07-07

PointNet++分类train.py

07-07

拓展阅读

大家都在看

API调用微信getWXACodeUnlimit()获取小程序码

10-25

RabbitMQ单机集群搭建出现Error: unable to perform an operation on node 'rabbit1@ClusterNode1'

07-18

DotNetty在window和linux下的性能对比

03-28

.net core 图片合并,图片水印,等比例缩小,SixLabors.ImageSharp

08-09

前后端分离,https站点无法通过Ajax访问http资源(Mixed Content,The page at 'https://xxx.com' was loaded over HTTPS)

12-20

WPF简单的分页控件实现

03-30

ASP.NET中实现中文简/繁体自动转换的类

07-02

layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0

01-28

热门评论