【2389. 和有限的最长子序列】
创始人
2025-05-29 20:34:27
0

来源:力扣(LeetCode)

描述:

给你一个长度为 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

方法:二分查找

由题意可知,nums 的元素次序对结果无影响,因此我们对 nums 从小到大进行排序。显然和有限的最长子序列由最小的前几个数组成。使用数组 f 保存 nums 的前缀和,其中 f[i] 表示前 i 个元素之和(不包括 nums[i])。遍历 queries,假设当前查询值为 q,使用二分查找获取满足 f[i] > q 的最小的 i,那么和小于等于 q 的最长子序列长度为 i−1。

代码:

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

执行用时:12 ms, 在所有 C++ 提交中击败了95.13%的用户
内存消耗:13.2 MB, 在所有 C++ 提交中击败了80.19%的用户
复杂度分析
时间复杂度:O((n+m)×logn),其中 n 是数组 nums 的长度,m 是数组 queries 的长度。对 nums 进行排序需要 O(nlogn) 的时间,二分查找需要 O(logn) 的时间。
空间复杂度:O(n)。返回值不计入空间复杂度。
author:LeetCode-Solution

相关内容

热门资讯

块级元素和行内元素 一、块级元素和行内元素 行内元素:         常见的行内元素: a、span、b、img、st...
shell 部分内置变量 说明 这些变量都是由bash这个程序本身进行修改使用; 其他shell不一定试用; 变量 $_ to...
链表(没做完。。) BM1 反转链表 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图&#...
十九、互斥量(互斥锁) 文章目录1、基本概念2、使用场景:用于实现对临界资源的独占式处理(能够解...
springboot控制层消息... 大概了解三种方式: 1.区别在于WebMvcConfigurerAdapter 新版本...
2023年湖北安全员ABC证书...   2023年湖北安全员ABC证书报名入口!报考条件?启程别 证...
蓝桥杯倒计时 | 倒计时18天 作者🕵️‍♂️:让机器理解语言か 专栏🎇:...
pandas读CSV、读JSO... 学习让我快乐   pandas的数据读取基本操作 pandas是Python中非常流行的数据处理库...
Hybrid App开发模式 Hybrid App(混合模式移动应用)是指介于web-app、nati...
SQL预编译和批量提交对性能提... 背景 一个项目,从kafka获取数据后,经过业务处理,生成...
C++ Lambda表达式的常... ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。...
【总结】docker 安装教程 各操作系统版本下载地址 mac 版:https://download.docker.c...
12 致远OA开发规范 开发案例(业务扩展接口) 1.客开开发前缀约束: 为了快速区分标准开发与客开开发&#x...
文件包含漏洞全面详解 文件包含漏洞总结一、什么是文件包含漏洞二、本地文件包含漏洞(LFI)三、LFI漏洞利用技巧1.配合文...
【C++进阶】unordere... 文章目录unordered系列容器介绍unordered_setunordered_set的模板参数...
【Linux】学会这些基本指令... 前言上篇文章介绍了一些常用的指令,这篇文章再来介绍一下Linux必须学会的指令。一.时...
panbas学习篇(一)数据的... 最大值最小值 Series.sum : Return the sum.Series.min : Re...
西安石油大学期末C语言重点题目... C语言重点知识点总结 ##例题4-7 (switch和字符的读入) ...
QML- QML视觉元素类型 QML视觉元素类型一、概述一、图像类型三、共享视觉属性1. 不透明度和可见性2. 转换(...
【 Linux入门 】之 手搓... 目的基本结构提取输入命令fgets的使用命令初步处理命令的本质创建子进程重要知识补充进程替换命令处理...