代码随想录算法训练营day28
代码随想录算法训练营
—day28
文章目录
- 代码随想录算法训练营
- 前言
- 一、122.买卖股票的最佳时机II
- 二、55. 跳跃游戏
- 三、跳跃游戏 II
- 方法一
- 方法二
- 1005. K 次取反后最大化的数组和
- 总结
前言
今天是算法营的第28天,希望自己能够坚持下来!
今日任务:
● 122.买卖股票的最佳时机II
● 55. 跳跃游戏
● 45.跳跃游戏II
● 1005.K次取反后最大化的数组和
一、122.买卖股票的最佳时机II
题目链接
文章讲解
视频讲解
思路:
计算相邻两天的利润,只收集正利润就是总的最佳收益
class Solution {
public:int maxProfit(vector<int>& prices) {int sum = 0;//计算相邻两天的利润,只收集正利润for (int i = 1; i < prices.size(); i++) {//if (prices[i] - prices[i - 1] > 0) sum += prices[i] - prices[i -1]; sum += (max(prices[i] - prices[i - 1], 0)); //这种写法也是很妙,代替了if}return sum;}
};
二、55. 跳跃游戏
题目链接
文章讲解
视频讲解
思路:
- 不需要具体去考虑跳到了那个元素底下,只需要统计最大的覆盖范围就可以了
- 从0开始遍历覆盖范围cover,更新最大覆盖范围(当前元素能覆盖到的范围是i+nums[i])
- 如果cover覆盖到数组末尾了,说明能够跳到末尾。
代码如下:
class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;if (nums.size() == 1) return true; //只有一个元素,就是能到达for (int i = 0; i <= cover; i++) { //注意这里是小于等于covercover = max(i + nums[i], cover); //取当前覆盖范围和当前遍历元素可以跳跃的范围中最大值作为新的覆盖发哪位if (cover >= nums.size() - 1) return true; //说明覆盖范围到终点了,可以跳到终点}return false;}
};
三、跳跃游戏 II
题目链接
文章讲解
视频讲解
方法一
思路:
首先题目是默认都可以跳到末尾的,而求的是最少跳几次。
沿用上一题的覆盖的思想,但这道题遍历的是整个数组。
1.用next记录下一跳覆盖的最远下标,用cur记录本轮覆盖的最远下标
2.遍历数组,记录遍历过程中的最远下标(用于下一跳)
3.当遍历到本轮负该的最远下标,说明需要下一跳来增大覆盖距离了,此时result++并更新cur,cur = next;
4.当本轮最远下标大于等于数组末尾的时候,说明本轮可以到达末尾了,不需要再遍历(寻找下一跳最远下标)了,直接break。
代码如下:
class Solution {
public:int jump(vector<int>& nums) {if (nums.size() == 1) return 0;int result = 0; //记录要跳多少次int cur = 0; //当前覆盖的最远距离下标int next = 0; //下一跳覆盖的最远下标for (int i = 0; i < nums.size(); i ++) {next = max(i + nums[i], next); //遍历每一个下标,记录下一跳覆盖最远下标//当前已经遍历到本次最远距离的下标if (i == cur) {result++; //说明需要跳一下次cur = next; //更新当前覆盖最远距离下标if (cur >= nums.size() - 1) break; //当前覆盖最远距离已经到达终点,次数也在上面记录了,不需要再遍历了}}return result;}
};
方法二
因为题目是默认一定会跳到最后的,所以其实不需要判断最后一次的最远覆盖下标有没有超过数组末尾。
方法就是遍历的时候只遍历到倒数第二位,因为如果遍历到倒数第二位,
- i == cur的话,说明还差最后一跳就到末尾了,此时result++。
- i !=cur的话,那么说明cur已经超过数组了,当前的result就是结果。
代码如下:
class Solution {
public:int jump(vector<int>& nums) {if (nums.size() == 1) return 0;int result = 0; //记录要跳多少次int cur = 0; //当前覆盖的最远距离下标int next = 0; //下一跳覆盖的最远下标for (int i = 0; i < nums.size() - 1; i ++) {next = max(i + nums[i], next); //遍历每一个下标,记录下一跳覆盖最远下标//当前已经遍历到本次最远距离的下标if (i == cur) {result++; //说明需要跳一下次cur = next; //更新当前覆盖最远距离下标// if (cur >= nums.size() - 1) break; 不需要判断了,因为遍历范围控制在了[0, nums.size()-1],}}return result;}
};
1005. K 次取反后最大化的数组和
题目链接
文章讲解
视频讲解
思路:
- 将数组按绝对值从大到小排列
- 遍历数组,遇到负值的话就取反
- 如果还有剩余的k,对绝对值最小的数进行取反(只需判断k是否为奇数,奇数只取反1次)
- 最后遍历数组求和
代码如下:
class Solution {
//自定义比较函数,绝对值大的排前面
static bool cmp (int a, int b) {return abs(a) > abs(b);
}public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end(), cmp); //将数组按照绝对值大小从大到小排序for (int i = 0; i < nums.size(); i++) { //遍历数组,如果是负数,则取反,k--if (nums[i] < 0 && k > 0) {nums[i] *= -1;k--;}}//如果k还没用完,判断k是否为奇数,奇数则取反最后一位绝对值最小的数if (k % 2 == 1) nums[nums.size() - 1] *= -1; int result = 0;//遍历求和for (int num:nums) {result += num;}return result;}
};
总结
贪心算法第二天,依旧难的是思路,而且即使知道思路,代码中也有许多细节需要注意。
明天继续加油!
相关文章:

代码随想录算法训练营day28
代码随想录算法训练营 —day28 文章目录 代码随想录算法训练营前言一、122.买卖股票的最佳时机II二、55. 跳跃游戏三、跳跃游戏 II方法一方法二 1005. K 次取反后最大化的数组和总结 前言 今天是算法营的第28天,希望自己能够坚持下来! 今日任务&#x…...
建立时间和保持时间
建立时间 在时钟有效沿到来之前,数据必须维持一段时间保持不变,这段时间就是建立时间 Tsetup 1 基本概念 建立时间(Setup Time): 在 SystemVerilog 中,建立时间是指在时钟信号的有效边沿(例如…...

vue,router路由传值问题,引用官方推荐
参考贴https://blog.csdn.net/m0_57033755/article/details/129927829 根据官方文档的更新日志,建议使用state传值 官方文档更新日志 实际的console结果 传值 router.push({ name: KnowledgeDetail, state: { params } });接收值 const historyParams histor…...

AIDD-人工智能药物设计-AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例
AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例 01 引言 AlphaFold由 DeepMind 团队开发,最初在蛋白质结构预测竞赛 CASP 中惊艳亮相。随着 AlphaFold2 和后续版本的迭代进步,其精度和通用性不断提升,逐渐走…...
Scala语言的面向对象编程
Scala语言的面向对象编程 引言 在当今的软件开发中,面向对象编程(OOP)是一种非常强大且广泛使用的编程范式。Scala是一种现代编程语言,结合了面向对象编程和函数式编程的特性,非常适合用于大规模软件的开发。本文将介…...
MySQL学习记录1【DQL和DCL】
SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件,可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配,_匹配一个字段…...

验证码转发漏洞
开发人员有时候会以数组的形式接收用户的手机号并遍历执行,这时就可以在注册或登录页面填写两个手机号并点击发送验证码,这两个手机号会同时收到相同验证码,可以用任意一个手机号登录或注册,即验证码转发漏洞。 1、burpsuite内置…...
使用 C++ 实现神经网络:从基础到高级优化
引言 在现代机器学习中,神经网络已经成为最重要的工具之一。虽然 Python 提供了诸如 TensorFlow、PyTorch 等强大的机器学习库,但如果你想深入理解神经网络的实现原理,或者出于某些性能、资源限制的考虑,使用 C 来实现神经网络会是…...
【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)
目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...
Kotlin语言的循环实现
Kotlin语言中的循环实现 Kotlin是一种现代的、跨平台的编程语言,广泛应用于Android开发、后端服务及多种其他软件开发领域。与Java类似,Kotlin也支持多种循环结构,包括for循环、while循环和do while循环。掌握这些循环结构是每个Kotlin开发者…...

基于CNN的人脸识别考勤管理系统实现
随着技术的不断进步,人脸识别技术已经在各行各业得到了广泛的应用,尤其在 考勤管理 上,它提供了更加智能、便捷、精准的解决方案。本篇博客将介绍如何基于 PyQt5 和 MySQL 实现一个 人脸识别考勤系统,并通过具体代码展示如何通过图…...
Android基于回调的事件处理
Android 中的回调机制:基于回调的事件处理详解 在 Android 开发中,回调(Callback)是一种常见的事件处理机制,主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比,回调机制更加灵活、通用&…...
postgis和地理围栏
postgis postgis是pg数据库的一个插件,除原数据类型外(int varchar)、新增了空间数据类型(geography和geometry)。比如我们新建一张道路表road(字段有名称varchar、建设时间timestamp、地理位置geometry),可以将道路名字、建设时间存进去,同…...
《鸿蒙系统AI技术:筑牢复杂网络环境下的安全防线》
在当今数字化时代,复杂网络环境给智能系统带来了诸多安全挑战,而鸿蒙系统中的人工智能技术却展现出强大的安全保障能力,为用户在复杂网络环境中的安全保驾护航。 微内核架构:安全基石 鸿蒙系统采用微内核架构,将核心…...
SQL SERVER__RSN 恢复的深入解析
1. RSN 的工作原理 RSN 是 SQL Server 内部用于跟踪和管理备份和恢复操作顺序的编号。每次数据库备份(包括完整备份、差异备份和事务日志备份)都会生成一个唯一的 RSN。SQL Server 在恢复过程中使用 RSN 来确保备份文件按正确的顺序应用,从而…...
面试加分项:Android Framework PMS 全面概述和知识要点
在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:PMS 基础知识 1.1 PMS 定义与工作原理 1.2 PMS 的主要任务 1.3 PMS 与相关组件的交互 第二章:PMS 的核心功能 2.1 应用安装与卸载机制 2.2 应用更新与版本管理 2.3 组件管理 第…...
Http协议封装
Myhttp封装http协议 源代码 #include <iostream> #include <cstring> #include <string> #include <thread> #include <atomic> #include <fstream> // 添加文件操作头文件#ifdef _WIN32 #include <winsock2.h> #include <ws2t…...

el-date-picker 禁用一个月前、一个月后(当天之后)的时间 datetimerange
文章目录 功能需求今天是 2025-01-09示例1示例2 代码 Vue2 功能需求 时间范围选择器,最大时间选择尺度为一个月。 今天是 2025-01-09 示例1 选择 2025-01-02 日 禁用未来日期(2025-01-09之后日期) 禁用上月2号(31日之前&#…...

【C】编译与链接
在本文章里面,我们讲会讲解C语言程序是如何从我们写的代码一步步变成计算机可以执行的二进制指令,并最终执行的。C语言程序运行主要包括两大步骤 -- 编译和链接,接下来我们就来一一讲解。 目录 1 翻译环境和运行环境 2 翻译环境 1&#…...

Github上传项目
写在前面: 本次博客仅仅是个人学习记录,不具备教学作用。内容整理来自网络,太多了,所以就不放来源了。 在github页面的准备: 输入标题。 往下滑,创建 创建后会跳出下面的页面 进入home就可以看到我们刚…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...