首页 > 其他分享 >2389. 和有限的最长子序列

2389. 和有限的最长子序列

时间:2024-09-09 23:14:17浏览次数:8  
标签:right nums int List mid 长子 序列 queries 2389

题目链接 2389. 和有限的最长子序列
思路 贪心+排序+二分
题解链接 非暴力做法:前缀和 + 二分查找 + 原地 O(1) 空间(Python/Java/C++/Go)
关键点 1. 贪心:由于元素和有上限,为了能让子序列尽量长,子序列中的元素值越小越好。 2. 本题要求计算元素和,因此元素在数组中的位置无关紧要,所以可以排序了。3. 把 nums 从小到大排序后,再从小到大选择尽量多的元素(相当于选择一个前缀),使这些元素的和不超过询问值。
时间复杂度 \(O((n+m)\log n)\)
空间复杂度 \(O(1)\)

代码实现:

class Solution:
    def answerQueries(self, nums: List[int], queries: List[int]) -> List[int]:

        nums.sort()
        n = len(nums)
        for i in range(1, n):
            nums[i] += nums[i-1]

        def upper_bound(val):
            left, right = -1, n
            while left + 1 < right:
                mid = (left+right) // 2
                if nums[mid] > val:
                    right = mid
                else:
                    left = mid
            return right

        for i, q in enumerate(queries):
            queries[i] = upper_bound(q)
        return queries
Python-官方库
class 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):
            queries[i] = bisect_right(nums, q)
        return queries

标签:right,nums,int,List,mid,长子,序列,queries,2389
From: https://www.cnblogs.com/WrRan/p/18405582

相关文章

  • LeetCode题集-3 - 无重复字符的最长子串
    题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。我们先来好好理解题目,示例1中怎么得到长度为3的?如果以第一个字符a为起始,不含重复的最长子串是abc;则我们这样表示(a)bcabcbb->(abc)abcbb,如此表达枚举出所有可能的情况如下:1.(a)bcabcbb->(abc)abcbb;2.a......
  • 946.验证栈序列
    题目链接:leetcode链接思路分析我们知道一个栈的一种入栈顺序可能对应多种出栈顺序,让我们肉眼来判断一下,还是很容易判断出来是不是正确的出栈顺序,那么如何用代码来实现呢?OK,先掏一个栈s出来再说inti=0;先把pushed进一个栈s,然后比较s.top与popped[i],如果相等,就s.p......
  • 力扣刷题——3177. 求出最长好子序列 II
    根据题意,暴力做法不可取,因为至少要对遍历位置之前的位置,以及不同的子序列阈值(跟k对应的那个)做循环。于是就能够想到使用动态规划的手段去解决问题,考虑需要保存的两个状态,当前序列末尾的数字、子序列阈值,设计一个二维的dp数组dp[i][j],其中i为位置索引,指代当前在nums数组中遍历的位......
  • 时间序列回归预测
    回归预测仅个人笔记使用,感谢点赞关注!深度学习LSTMPyTorch搭建LSTM实现时间序列预测:基于torch实现时间序列预测(多种方法)传统方法自回归树模型XGBLGBM组合模型......
  • 训练框架技术序列一:Megtron-LLM架构源码
    本文章涉及的Megatron-llm的XMind思维导图源文件和PDF文件,可在网盘下载:https://pan.baidu.com/s/1xRZD-IP95y7-4Fn0C_VJMg提取码:qxff一、引言Megatron-Core是一个基于PyTorch的开源库,专为在NVIDIAGPU上高效训练大型语言模型(LLMs)而设计。它提供了一系列GPU优化的训......
  • 关于求合法括号子序列个数
    求合法括号子序列个数发了近半天时间都没人发现里面的致命错误()还好我悄咪咪改了题意背景合法括号串的定义如下:()是合法括号串。如果A是合法括号串,则(A)是合法括号串。如果A,B是合法括号串,则AB是合法括号串。子串与不同的子串的定义如下:字符串S的子串是S......
  • 手撕Python之序列类型
    1.列表---list索引的使用当我们有一个数据的时候,我们怎么将这个数据存储到程序呢?我们定义一个变量,将数据存储在变量中那么如果有100个数据呢?要定义100个变量吗?我们是可以用列表这个东西进行多个数据的存放列表的定义:[]空列表:[]列表:[元素1,元素2,元素3]列表中的内容......
  • 392. 判断子序列(leetcode)
    https://leetcode.cn/problems/is-subsequence/description/classSolution{publicbooleanisSubsequence(Strings,Stringt){//依据题意,可以判断是求最长公共子序列的特殊情况//f[i][j]=max(f[i-1][j],f[i][j-1],f[i-1][j-1]+1)//f[1]......
  • 时间序列结构变化分析:Python实现时间序列变化点检测
    平稳性是时间序列分析与预测的核心概念。在平稳条件下,时间序列的统计特性(如均值)在时间维度上保持不变,仅存在随机波动。但是实际数据集中很少观察到完全的平稳性。时间序列通常会经历结构性断裂或变化。这些变化会引入非平稳性,从而改变时间序列的整体分布,这些标志着变化开始的时间......
  • LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现N*K时间复杂度
    3177.求出最长好子序列II题目链接题目描述给你一个整数数组nums和一个非负整数k。如果一个整数序列seq满足在下标范围[0,seq.length-2]中最多只有k个下标i满足seq[i]!=seq[i+1],那么我们称这个整数序列为好序列。请你返回nums中好子序列的最长长度......