代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

  • 122. 买卖股票的最佳时机 II
    • 题目
    • 解法
  • 55. 跳跃游戏
    • 题目
    • 解法
  • 45. 跳跃游戏 II
    • 题目
    • 解法
  • 感悟

122. 买卖股票的最佳时机 II

题目

在这里插入图片描述

解法

  1. 贪心:局部最优:收集每天的正利润,全局最优:求得最大利润。
class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;for (int i = 1; i < prices.size(); i++) {result += max(prices[i]-prices[i-1], 0);      } return result;}
};

55. 跳跃游戏

题目

在这里插入图片描述

解法

  1. 转变思维:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。
class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;if (nums.size() ==  1) return true;for (int i = 0; i <= cover; i++) {cover = max(i + nums[i], cover );if (cover >= nums.size() - 1) return true;}return false;}
};

45. 跳跃游戏 II

题目

在这里插入图片描述

解法

  1. 错误:忽略了一次可跳跃范围内可能错过最大的值
class Solution {
public:int jump(vector<int>& nums) {// 忽略了一次可跳跃范围内可能错在最大的值int cover = 0;if (nums.size() ==  1) return 0;int result = 0;for (int i = 0; i < nums.size(); i++) {if(i + nums[i] > cover) { // 范围更新一次就加一  cover = i + nums[i];result++;};if (cover >= nums.size() - 1) return result;}return result;}
};

2.探索可以跳跃的最远距离

class Solution {
public:int jump(vector<int>& nums) {// 忽略了一次可跳跃范围内可能错在最大的值if (nums.size() ==  1) return 0;int curDistance = 0;int nextDistance = 0;int result = 0;for (int i = 0; i < nums.size(); i++) {nextDistance = max(i + nums[i], nextDistance); //下次可以跳跃的最远距离if (i == curDistance) { // 达到目前可跳跃的最远距离result++; //目前可跳跃的最远距离达不到终点, 需要下一次跳跃curDistance = nextDistance; // 更新目前可跳跃的最远距离if (nextDistance >= nums.size() - 1) break; }}return result;}
};

3.特殊处理:针对题中生成的测试用例可以到达 nums[n - 1]。只要能达到倒数第二个,直接加一

class Solution {
public:int jump(vector<int>& nums) {int curDistance = 0;    // 当前覆盖的最远距离下标int ans = 0;            // 记录走的最大步数int nextDistance = 0;   // 下一步覆盖的最远距离下标for (int i = 0; i < nums.size() - 1; i++) { // 注意这里是小于nums.size() - 1,这是关键所在nextDistance = max(nums[i] + i, nextDistance); // 更新下一步覆盖的最远距离下标if (i == curDistance) {                 // 遇到当前覆盖的最远距离下标curDistance = nextDistance;         // 更新当前覆盖的最远距离下标ans++;}}return ans;}
};

感悟

局部最优可以推出全局最优,找不出反例,试一试贪心!

转变思维好难!

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

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

相关文章

[激光原理与应用-79]:激光应用二开软件现场调测步骤详解

目录 一、硬件安装 步骤1&#xff1a;机械&#xff1a;机械控制安装、多通道选择的电机驱动器安装 步骤2&#xff1a;光路&#xff1a;激光器、外光路 步骤3&#xff1a;电路&#xff1a;工控机、板卡、连接线 二、工控机二开软件的调测 步骤1&#xff1a;加工板卡的软件…

你虽然不一定用得到但一定要知道的ChatGPT五大功能

ChatGPT拥有许多功能&#xff0c;但很多人并没有充分利用这些功能&#xff0c;从而错失了这个全球领先的AI聊天机器人的全部潜力。 以下是你绝对应该尝试的五个ChatGPT功能。 朗读功能 2024 年 3 月&#xff0c;OpenAI 推出了 ChatGPT的朗读功能&#xff0c;使这个AI工具能够…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧&#xff0c;这也许不适合0编程基础的人看&#xff0c;因为我会C语言了&#xff0c;笔记做的可能有思维上的跳跃&#xff0c;如果0基础可能会觉得有些地方转折得莫名奇妙&#xff0c;但我的学习笔记实操还是比较多的&#xff0c;基本都是真实运行程序结…

vue3项目初始化

初始化项目newsapp VSCode 打开终端&#xff0c;newsapp项目目录&#xff0c;可自定义 vue create newsapp 有提示“因为在此系统上禁止运行脚本”的话&#xff0c;请执行 set-ExecutionPolicy RemoteSigned 执行后再重复执行vue create newsapp 注意选择Vue 3版本 测试项…

vector类详解及重要函数实现

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a;vector类 主厨&#xff1a;邪王真眼 所属专栏&#xff1a;c专栏 主厨的主页&#xff1a;Chef‘s blog 坚持下去&#xff0c;成功不是目的&a…

自学算法:02 二分搜索

题目&#xff1a; 1. 在有序数组中确定num存在还是不存在。 2. 在有序数组中找>num的最左位置。 3. 在有序数组中找<num的最右位置。 4. 二分搜索不一定发生在有序数组上&#xff08;比如寻找峰值问题&#xff09;。 5. 二分答案法。 题目一 简单的二分搜索法。 public…

MC0207 中转站

物流业为了降低物流成本&#xff0c;提高物流效率&#xff0c;运输过程中通常不会由始发地直达目的地&#xff0c;而是经由多个中转站中转&#xff0c;最终到达目的地。最常见的便是快递业&#xff0c;由于中转站有很多&#xff0c;要想将所有中转站两两互通代价过高&#xff0…

Web 常见的攻击方式有哪些?

常见的 Web 攻击方式有以下几种&#xff1a; 跨站脚本攻击&#xff08;XSS 攻击&#xff09; 跨站请求伪造&#xff08;XSRF 攻击&#xff09; SQL 注入 XSS 攻击 MDN 定义如下&#xff1a; 跨站脚本攻击&#xff08;Cross-site scripting&#xff0c;XSS&#xff09;是一…

【每周赠书活动第1期】Python编程 从入门到实践 第3版(图灵出品)

编辑推荐 适读人群 &#xff1a;本书适合对Python感兴趣的所有读者阅读。 编程入门就选蟒蛇书&#xff01; 【经典】Python入门经典&#xff0c;常居Amazon等编程类图书TOP榜 【畅销】热销全球&#xff0c;以12个语种发行&#xff0c;影响超过 250 万读者 【口碑】好评如潮…

手撕算法-删除有序数组中的重复项 II

描述 例如&#xff1a;输入&#xff1a;nums [1,1,1,2,2,3]输出&#xff1a;5, nums [1,1,2,2,3]解释&#xff1a;函数应返回新长度 length 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。 分析 双指针, fast, slow。nums[…

Python并发编程:线程和多线程的使用

前面的文章&#xff0c;我们讲了什么Python的许多基础知识&#xff0c;现在我们开始对Python并发编程进行学习。我们将探讨 Python 中线程和多线程的使用。帮助大家更好地理解如何使用这种技术。 目录 1. 线程&#xff08;Threads&#xff09; 1.1 Python 中的线程工作原理 …

Andorid项目源码 仿ios音量调节的效果 (内附源码下载)

下载地址&#xff1a; https://download.csdn.net/download/Nekosann/89026144 这段代码是Android应用程序的一部分&#xff0c;主要实现了一个仿iOS风格的音量调节效果。具体来说&#xff0c;它使用了一个自定义的评分条&#xff08;RatingBar&#xff09;&#xff0c;允许用…

CSP-S 真题:格雷码

原文链接&#xff1a;CSP-S 真题第二讲&#xff1a;格雷码 说明&#xff1a;CSDN和公众号文章同步发布&#xff0c;需要第一时间收到最新内容&#xff0c;请关注公众号【比特正传】。 一、题目背景 题目来源&#xff1a;CSP-S 2019年 T1 题目考察点&#xff1a;递归、搜索 …

C语言:实现使用malloc函数模拟开辟一个二维数组

目录 解题思路 步骤一&#xff1a;开辟空间 步骤二&#xff1a;使用空间 步骤三&#xff1a;释放空间 图解 完整代码展示&#xff1a;注意看注释 在C语言编程中&#xff0c;处理多维数据结构时&#xff0c;我们通常会遇到二维数组。然而&#xff0c;对于特定大小或需要动…

Java秘笈

一、缩略 二、详版 【CDN分发】||----【跳板机】---SSH&#xff1a;(^_^) 管理员/运维Iptables【防火墙】要求&#xff1a;HA||----【等保系统】||----【蜜罐系统】【反向代理】Nginx/Lvs【静态服务器】【边际路由】要求&#xff1a;HA||Gateway/Zull【Api网关】要求&#xff1…

2023年12月青少年软件编程C语言一级真题答案——持续更新.....

一、数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分别为保留2位小数输出的F,以及整数N,以…

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…

悦数图数据库推出 AI 知识图谱构建器及图语言生成助手

简介&#xff1a; 随着人工智能应用在全球范围的普及和风靡&#xff0c;大语言模型技术&#xff08;Large Language Model&#xff0c;简称 LLM&#xff09;受到了广泛的关注和应用。而图数据库作为一种处理复杂数据结构的工具&#xff0c;能够为企业构建行业大语言模型提供强大…

Linux之基础IO

1.C语言中的文件操作函数 文件的打开 path为文件路径&#xff0c;mode为打开方式&#xff0c;它们都是字符串。 代码演示&#xff1a; 此时&#xff0c;当前目录中并没有log.txt文件&#xff0c;但是没关系&#xff0c;fopen会在当前路径下创建log.txt文件。 简单来说&#xf…

分享 | 使用Virtuoso VCPVSR工具基于标准单元的布局布线流程

​ 本节内容 导览 一、准备工作 二、运行VCP前的配置 三、VCP的布局规划 四、VCP的自动摆放 五、VSR的自动绕线 分享使用Virtuoso GXL Custom Digital Placer(VCP) & Space-based Router(VSR)工具进行基于纯数字Standard-Cell布局布线的操作流程。 VCP&VSR演…