LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 贪心错误解
      • 2.2 优先队列/单调队列

1. 题目

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。
也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。

你的目标是到达数组最后一个位置(下标为 n - 1 ),你的 得分经过的所有数字之和

请你返回你能得到的 最大得分

示例 1:
输入:nums = [1,-1,-2,4,-7,3], k = 2
输出:7
解释:你可以选择子序列 [1,-1,4,3] (上面加粗的数字),和为 7 。示例 2:
输入:nums = [10,-5,-2,4,0,3], k = 3
输出:17
解释:你可以选择子序列 [10,4,3] (上面加粗数字),和为 17 。示例 3:
输入:nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
输出:0提示:1 <= nums.length, k <= 10^5
-104 <= nums[i] <= 10^4

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/jump-game-vi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 45. 跳跃游戏 II(贪心/BFS,难)
LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)
LeetCode 1345. 跳跃游戏 IV(BFS)
LeetCode 1340. 跳跃游戏 V(DP)
LeetCode LCP 09. 最小跳跃次数

2.1 贪心错误解

  • k 步以内遇到正的,跳过去
  • 没有遇到正的,跳到最大的负数上,LC测试例子弱 [-1,-1,-4,-5,-4,-4,-4] k=2,这个例子不能通过,下面程序输出 -14,正解 -13
class Solution {
public:int maxResult(vector<int>& nums, int k) {int n = nums.size(), ans = nums[0], maxNegative = INT_MIN, idx = -1;for(int i = 1; i < n; ++i) {int step = k;bool inNegativePos = true;bool reachEnd = false;maxNegative = INT_MIN;for( ; i < n && step--; i++){if(nums[i] >= 0){ans += nums[i];inNegativePos = false;break;}else{if(i == n-1)reachEnd = true;if(nums[i] >= maxNegative){maxNegative = nums[i];idx = i;}}}if(inNegativePos){if(reachEnd){ans += nums[n-1];break;}else{ans += nums[idx];i = idx;}}}return ans;}
};

2.2 优先队列/单调队列

  • 优先队列,维护 i 之前的位置获得的最大和
  • 跟当前的位置距离超过 K 的,pop掉,堆顶的位置跳到 i 是 i 处的最优值,存入堆中
  • 时间复杂度 O(nlogn)O(nlogn)O(nlogn)
class Solution {
public:int maxResult(vector<int>& nums, int k) {int n = nums.size(), ans = nums[0];priority_queue<pair<int,int>> q;// sum. idxq.push({nums[0], 0});for(int i = 1; i < n; ++i) {while(i-q.top().second > k)//这些位置,不能跳到 i 位置q.pop();//能调过来的位置,选最大的,跳到 ians = q.top().first + nums[i];// 到 i位置的最优选择q.push({ans, i});//存入优先队列}return ans;}
};

848 ms 64.4 MB C++

  • 单调队列,越靠后的点 j ,如果其位置的最大和不比前面 i 的小,那么 i 的值一定不是更优的选择,可以删掉,维护一个单调递减队列
  • 时间复杂度 O(n)O(n)O(n)
class Solution {
public:int maxResult(vector<int>& nums, int k) {int n = nums.size(), ans = nums[0];deque<pair<int,int>> q;// sum. idxq.push_back({nums[0], 0});for(int i = 1; i < n; ++i) {while(i-q.front().second > k)//这些位置,不能跳到 i 位置q.pop_front();ans = q.front().first + nums[i];// 到 i位置的最优选择while(!q.empty() && q.back().first <= ans)q.pop_back();q.push_back({ans, i});//存入队列}return ans;}
};

308 ms 56.2 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)

文章目录1. 题目2. 解题1. 题目 给你一个 n 个点组成的无向图边集 edgeList &#xff0c;其中 edgeList[i] [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边。请注意&#xff0c;两个点之间可能有 超过一条边 。 给你一个查询数组queries &#xff0c;其中 qu…

限制RICHTEXTBOX的输入的范围

附件&#xff1a;http://files.cnblogs.com/xe2011/WindowsFormsApplication_LimitRichTextBoxInput.rarusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using Syst…

NLP项目工作流程

文章目录1. 谷歌Colab设置2. 编写代码3. flask 微服务4. 打包到容器5. 容器托管参考 基于深度学习的自然语言处理使用这篇文章的数据(情感分类)进行学习。 1. 谷歌Colab设置 Colab 地址 新建笔记本 设置 选择 GPU/TPU 加速计算 测试 GPU 是否分配 import tensorflow…

牛客 牛牛浇树(差分)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10323/A 来源&#xff1a;牛客网 牛牛现在在花园养了n棵树&#xff0c;按顺序从第1棵到第n棵排列着。 牛牛每天会按照心情给其中某一个区间的树浇水。 例如如果某一天浇水的区间为[2,4]&…

再议 语法高亮插件的选择

之前一篇《为博客园选择一个小巧霸气的语法高亮插件》介绍了语法高亮插件的选择&#xff0c;当时只注重速度了。这些天在做深度定制的时候发现一个严重的问题&#xff0c;匹配精度不够。 什么是匹配精度呢&#xff1f;简单说就是没有把代码分块&#xff0c;是否分的足够细&…

Python自定义时间间隔访问网页

方法一&#xff1a;利用webbrowser import time import webbrowserwhile True: # 死循环time.sleep(60 * 1) # 程序等待时间&#xff0c;这里等待1min&#xff0c;参数的基本单位是秒print("正在访问&#xff1a;请稍等。。。")webbrowser.open("https://blo…

牛客 挑选方案问题(排列组合)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10323/B 来源&#xff1a;牛客网 自助餐厅里有5个盘子&#xff0c;里面装的都是面包。 第1个盘子里有无限个面包&#xff1b; 第2个盘子里只有1个面包&#xff1b; 第3个盘子里只有4个面…

牛客 统计好元组

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10325/A 来源&#xff1a;牛客网 现在给定一个数组arr&#xff0c;和a,b两个数字&#xff0c;你要做的就是找到&#xff08;i&#xff0c;j&#xff0c;k&#xff09;。且满足 1. 0 <…

牛客 共鸣问题(思维难题)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10325/B 来源&#xff1a;牛客网 现在有n个音符和m对共鸣关系&#xff0c;编号为1~n&#xff0c; 每个音符自己有一个奏响时的优美程度&#xff0c; 共鸣关系(x,y,z)表示音符x和y同时奏响…

GitHub标星2.6万!Python算法新手入门大全

今天推荐一个Python学习的干货。 几个印度小哥&#xff0c;在GitHub上建了一个各种Python算法的新手入门大全&#xff0c;现在标星已经超过2.6万。这个项目主要包括两部分内容&#xff1a;一是各种算法的基本原理讲解&#xff0c;二是各种算法的代码实现。 传送门在此&#x…

Notepad++的json 格式化

一、在线安装&#xff1a; 1. 打开nodepad 2. 找到JSON Viewer 点击右上角"安装", 会有提示框安装重启notepad, 点击ok 3. 自动重启后, 就可以看到插件这栏有JSON Viewer了, 至于用哪个选项可以格式化, 就来动手试试吧~~~ 二、下载复制到指定位置 1、下载对应版本的…

1502: [NOI2005]月下柠檬树 - BZOJ

Description Input文件的第1行包含一个整数n和一个实数alpha&#xff0c;表示柠檬树的层数和月亮的光线与地面夹角(单位为弧度)。第2行包含n1个实数h0,h1,h2,…,hn&#xff0c;表示树离地的高度和每层的高度。第3行包含n个实数r1,r2,…,rn&#xff0c;表示柠檬树每层下底面的圆…

Pytorch 神经网络训练过程

文章目录1. 定义模型1.1 绘制模型1.2 模型参数2. 前向传播3. 反向传播4. 计算损失5. 更新参数6. 完整简洁代码参考 http://pytorch123.com/ 1. 定义模型 import torch import torch.nn as nn import torch.nn.functional as Fclass Net_model(nn.Module):def __init__(self):…

开发人员:月薪过万与年薪百万之间的差距

有一句话在开发人员圈子广为流传&#xff1a;“初级开发人员的标志就是需要在中级和高级开发人员的指导下完成工作。”所以&#xff0c;我们不要苛刻初级开发人员写的代码对错严谨&#xff0c;毕竟每个开发人员都有这样的一个过程。据译者观察&#xff0c;初级开发人员往往认为…

天池 在线编程 所有子数组之和(排列组合)

文章目录1. 题目2. 解题2.1 暴力解2.1 O(n) 解1. 题目 给定一个数组nums, 你需要返回这个数组所有子数组之和。 如果nums [2, 4, 1], 数组所有的子集是 {[2], [4], [1], [2, 4], [4, 1], [2, 4, 1]} 保证返回的结果是int的类型 len(nums) < 50 示例 示例1: 输入: nums …

MyEclipse中代码提醒功能

一&#xff1a;最近仔细研究了下spring mvc中的代码&#xff0c;自己在配置文件哪里来时出现问题&#xff0c;没有提醒&#xff0c;只好自己搜了下有关的信息。如下 window--->preferences---->java---->Editor------>Content Assist如下图&#xff1a; 讲画圈部分…

天池 在线编程 木材加工(二分查找)

文章目录1. 题目2. 解题1. 题目 有一些原木&#xff0c;现在想把这些木头切割成一些长度相同的小段木头&#xff0c;需要得到的小段的数目至少为 k。 当然&#xff0c;我们希望得到的小段越长越好&#xff0c;你需要计算能够得到的小段木头的最大长度。 木头长度的单位是厘米…

天池 在线编程 最频繁出现的子串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串&#xff0c;我们想知道满足以下两个条件的子串最多出现了多少次&#xff1a; 子串的长度在之间 [minLength, maxLength] 子串的字符种类不超过 maxUnique 写一个函数 getMaxOccurrences &#xff0c;其返回满足条件的子串最多出…

关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

刚接触iOS开发的人难免会对苹果的各种证书、配置文件等不甚了解&#xff0c;可能你按照网上的教程一步一步的成功申请了真机调试&#xff0c;但是还是对其中的缘由一知半解。这篇文章就对Certificate、Provisioning Profile等做个总结。 1.概念介绍 如果你拥有一个开发者账户的…

12306 抢票项目霸榜 GitHub,标星即将破万

十一将至&#xff0c;你买到回家的火车票了吗&#xff1f;如果没有&#xff0c;你可以试着打开 GitHub&#xff0c;在搜索栏键入 12306 的关键词&#xff0c;我相信你会发现一个新大陆。没错&#xff0c;这里有 1572 个抢票项目。它们大多用 Python、JavaScript、Java 写成。其…