【LetMeFly】2389.和有限的最长子序列

力扣题目链接:https://leetcode.cn/problems/longest-subsequence-with-limited-sum/

给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries

返回一个长度为 m 的数组 answer ,其中 answer[i]nums 中 元素之和小于等于 queries[i]子序列最大 长度  。

子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。

示例 1:

输入:nums = [4,5,2,1], queries = [3,10,21]
输出:[2,3,4]
解释:queries 对应的 answer 如下:
- 子序列 [2,1] 的和小于或等于 3 。可以证明满足题目要求的子序列的最大长度是 2 ,所以 answer[0] = 2 。
- 子序列 [4,5,1] 的和小于或等于 10 。可以证明满足题目要求的子序列的最大长度是 3 ,所以 answer[1] = 3 。
- 子序列 [4,5,2,1] 的和小于或等于 21 。可以证明满足题目要求的子序列的最大长度是 4 ,所以 answer[2] = 4 。

示例 2:

输入:nums = [2,3,4,5], queries = [1]
输出:[0]
解释:空子序列是唯一一个满足元素和小于或等于 1 的子序列,所以 answer[0] = 0 。

提示:

  • n == nums.length
  • m == queries.length
  • 1 <= n, m <= 1000
  • 1 <= nums[i], queries[i] <= 106

方法一:前缀和 + 二分

这道题要的是“子序列”。什么意思?意思就是随便删除数组中的元素,不必保证连续。

那么想要尽可能多的数字的和不超过q,当然是要这些数字尽可能地小。

因此我们给原数组中的元素从小到大排序,再使用前缀和的方法令nums[i]为“nums[0]到nums[i]的元素和”。

这样,我们在寻找“和不超过q”的最长序列时,只需要二分找到nums中最后一个不大于q的元素的位置,这就说明排过序的nums数组中这个元素及其之前的所有元素的和不超过q,且这是最后一个满足上述条件的位置。

这个位置即为所求。

  • 时间复杂度 O ( l e n ( n u m s ) × log ⁡ l e n ( n u m s ) + l e n ( q u e r i e s ) × log ⁡ l e n ( n u m s ) ) O(len(nums)\times \log len(nums) + len(queries)\times\log len(nums)) O(len(nums)×loglen(nums)+len(queries)×loglen(nums)),排序的时间复杂度是 O ( l e n ( n u m s ) × log ⁡ l e n ( n u m s ) O(len(nums)\times \log len(nums) O(len(nums)×loglen(nums),每次查找的时间复杂度是 O ( log ⁡ l e n ( n u m s ) ) O(\log len(nums)) O(loglen(nums))
  • 空间复杂度 O ( log ⁡ l e n ( n u m s ) ) O(\log len(nums)) O(loglen(nums)),这里我们修改了 n u m s nums nums数组和 q u e r i e s queries queries数组,只是排序时用到了 O ( log ⁡ l e n ( n u m s ) ) O(\log len(nums)) O(loglen(nums))的空间

AC代码

C++

class Solution {public:vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {sort(nums.begin(), nums.end());for (int i = 1; i < nums.size(); i++) {nums[i] += nums[i - 1];}for (int& q : queries) {q = upper_bound(nums.begin(), nums.end(), q) - nums.begin();}return queries;}
};

Python

# from typing import List
# import bisectclass Solution:def answerQueries(self, nums: List[int], queries: List[int]) -> List[int]:nums.sort()for i in range(1, len(nums)):nums[i] += nums[i - 1]for i, q in enumerate(queries):  # 这里for q in queries的话,修改q是不会修改queries中的值的queries[i] = bisect.bisect_right(nums, q)return queries

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/129618747

LeetCode 2389. 和有限的最长子序列相关推荐

  1. LeetCode 1615. 最大网络秩 / 2389. 和有限的最长子序列 / 1626. 无矛盾的最佳球队(排序+动态规划)

    1615. 最大网络秩 2023.3.15 每日一题 题目描述 n 座城市和一些连接这些城市的道路 roads 共同组成一个基础设施网络.每个 roads[i] = [ai, bi] 都表示在城市 a ...

  2. 【2389. 和有限的最长子序列】

    来源:力扣(LeetCode) 描述: 给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries . 返回一个长度为 m 的数组 answer ,其中 answer[i ...

  3. LeetCode # 524 字符串中最长子序列

    给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符串.如果答案不存在,则返回空字符串. 示例 ...

  4. LeetCode简单题之最长特殊序列 Ⅰ

    题目 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 .如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) ...

  5. 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列

    最长公共子序列 的 算法思路 在这里 点击进入  将 代码稍微改动一下 就可以   ,   最长公共子序列  是两个 字符串求 公共子序列  , 可以将其中的 一个 改为 从 a 到 z  这样输入另 ...

  6. 动态规划之-----单调递增最长子序列(nyoj17)

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行 ...

  7. 24-单调递增最长子序列(多种解法总结)

    单调递增最长子序列 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ...

  8. C语言实现最长子序列 longest subsequence 算法(附完整源码)

    最长子序列 longest subsequence 算法 C语言最长子序列 longest subsequence 算法完整源码(定义,实现,main函数测试) C语言最长子序列 longest su ...

  9. C#LeetCode刷题之#521-最长特殊序列 Ⅰ​​​​​​​(Longest Uncommon Subsequence I)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3949 访问. 给定两个字符串,你需要从这两个字符串中找出最长的特 ...

最新文章

  1. C++:rand()函数和srand()函数解读
  2. python中按钮关联两个函数_两个函数,在一个函数运行的情况下,点击按钮运行第二个...
  3. ckeditor缺少图像源文件地址_微软的模拟飞行带你开着飞机浏览世界附下载地址...
  4. RocketMQ 4.5.1 双主双从异步复制环境搭建
  5. TCP和UDP是否可以绑定同一端口进行通信
  6. java垃圾回收机制_JVM的垃圾回收机制——垃圾回收算法
  7. modelsim与modelsim_altera使用的一些区别
  8. Sqlserver中char,nchar,varchar与Nvarchar的区别
  9. Java开发环境!为什么MySQL不推荐使用uuid作为主键
  10. docker -v 挂载文件_浅谈关于docker中数据卷的操作,附带案例
  11. JSK-383 是否闰年(课后)【入门】
  12. 在MacOS系统中如何自定义屏幕保护程序?
  13. 拓端tecdat|把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!
  14. VS2015安装Visual C++的Win32控制台应用程序
  15. 使用turtle绘图:绘制“点“:dot()绘制“标记“:stamp()
  16. [C#] C#深入浅出4th Edition [2]
  17. HTML页面为什么设置了UTF-8仍然中文乱码
  18. SDNFV Fest论坛成功举办 全景展现SDN/NFV测试成果
  19. Linux 各种安装包
  20. 解析rtf格式的文件数据

热门文章

  1. 内网渗透(四十六)之横向移动篇-使用系统漏洞ms17010横向移动
  2. 第十五天 13-linux防火墙
  3. RabbitMq详解+SpringBoot整合RabbitMq快速入门
  4. sprintf函数详解
  5. 在macOS上使用LaTeX
  6. 关于Java中的引用的用法
  7. 深度学习——DRD-Net
  8. 关于B/S模式系统的设计与实现
  9. base64编码,原理是什么,有什么作用?
  10. aliyun - ddns