首页 > 其他分享 >滑动窗口&动态规划-1031. 两个非重叠子数组的最大和

滑动窗口&动态规划-1031. 两个非重叠子数组的最大和

时间:2024-09-11 18:13:49浏览次数:1  
标签:right res 线段 prizePositions 数组 滑动 1031 mx left

问题描述

image

问题求解

本题还挺巧妙,有点类似两数和的扩展题。
对于两个线段,我们可以固定右线段,然后寻找左线段的最大值。
固定右线段使用到的算法是滑动窗口,寻找左线段最大值的算法是动态规划。
时间复杂度:O(n)

class Solution:
    def maximizeWin(self, prizePositions: List[int], k: int) -> int:
        n = len(prizePositions)
        
        mx = [0] * n
        res = left = 0
        for right, pos in enumerate(prizePositions):
            while pos - prizePositions[left] > k:
                left += 1
            
            res = max(res, right - left + 1 + (mx[left - 1] if left else 0))
            mx[right] = max(mx[right - 1] if right else 0, right - left + 1)
        
        return res

标签:right,res,线段,prizePositions,数组,滑动,1031,mx,left
From: https://www.cnblogs.com/hyserendipity/p/18408693

相关文章

  • HarmonyOS开发之NestedScroll嵌套滑动
    在Harmony应用开发中,为了提高用户体验,开发者经常需要实现复杂的滑动交互效果。特别是在一些需要内外层滑动结合的应用场景下,如何优雅地处理这些滑动事件变得尤为重要。本文将探讨两种使用nestedScroll机制来实现滑动布局的方法,并附上相应的代码示例。场景一:基于NestedScroll实现Wat......
  • 给你一个promise数组,我需要并行执行,并且数组里面所有promise全部抛出错误之后,才抛出错
    今天面试,遇到如标题这么一个问题,真的给我问懵逼了,一开始想说使用promise.all,但是不行,因为promise.all只要有一个抛出错误了,整个promise.all就全部失败了。当时给我问的支支吾吾的打答不出来,并且还需要并行执行,想破头了都想不出来。后面回来重新学习ECMAScript才发现,使用一个API,pro......
  • Java数组篇[10]:数组的常见应用场景
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Jav......
  • 贪心算法day28|买卖股票的最佳时机、55. 跳跃游戏、1005. K 次取反后最大化的数组和
    贪心算法day28|买卖股票的最佳时机、55.跳跃游戏、1005.K次取反后最大化的数组和122.买卖股票的最佳时机II55.跳跃游戏1005.K次取反后最大化的数组和122.买卖股票的最佳时机II给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一......
  • LeetCode:2555. 两个线段获得的最多奖品 动态规划+滑动窗口
    2555.两个线段获得的最多奖品today2555两个线段获得的最多奖品题目描述在X轴上有一些奖品。给你一个整数数组prizePositions,它按照非递减顺序排列,其中prizePositions[i]是第i件奖品的位置。数轴上一个位置可能会有多件奖品。再给你一个整数k。你可以选择两......
  • Python Numpy布尔数组在数据分析中的应用
    大家好,在数据分析和科学计算中,布尔数组是一个非常重要的工具,它可以帮助我们进行数据的筛选、过滤和条件判断。Python的Numpy库提供了丰富的布尔运算功能,能够高效地对数据进行处理。本文将深入探讨Numpy中的布尔数组,介绍布尔运算和布尔索引的使用方法,并通过具体的示例代码展示其......
  • 209. 长度最小的子数组
    滑动窗口!! classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){intleft=0,right=0,sum=nums[0];intminLength=INT_MAX;while(left<=right&&right<nums.size()){......
  • 1146. 快照数组
    题目链接1146.快照数组思路哈希+二分法题解链接记录修改历史:哈希表+二分查找(Python/Java/C++/Go/JS/Rust)关键点理解题意:查询时要找到<=snap_id的最后一次修改记录时间复杂度\(O(\logn)\)空间复杂度\(O(n)\)代码实现:classSnapshotArray:de......
  • 树状数组求区间最大小值
    constintN=5e5+5;constintINF=0x3f3f3f3f;intn,q;inta[N],trmx[N],trmn[N];//将原来的累加改为求最值voidadd(intx,intk){while(x<=n){trmx[x]=max(trmx[x],k);trmn[x]=min(trmn[x],k);x+=lowbit(x);}}//区间查询最大/小值......
  • 基于数组的循环队列
    基于数组的循环队列关键点在于:当元素总数超过队列长度后,出队、入队等行为如何避免数组越界问题。环绕数组的逻辑结构确实可以类比时钟,当指针走到最后一个刻度(比如12小时制的12点),再往前走时,指针会回到最开始的刻度(即1点),而不是继续前进到一个不存在的位置。 以12小时制时钟为......