当前位置: 首页 > news >正文

代码随想录算法训练营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. 跳跃游戏

题目链接
文章讲解
视频讲解

思路:

  1. 不需要具体去考虑跳到了那个元素底下,只需要统计最大的覆盖范围就可以了
  2. 从0开始遍历覆盖范围cover,更新最大覆盖范围(当前元素能覆盖到的范围是i+nums[i])
  3. 如果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 次取反后最大化的数组和

题目链接
文章讲解
视频讲解

思路:

  1. 将数组按绝对值从大到小排列
  2. 遍历数组,遇到负值的话就取反
  3. 如果还有剩余的k,对绝对值最小的数进行取反(只需判断k是否为奇数,奇数只取反1次)
  4. 最后遍历数组求和

代码如下:

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天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#x…...

建立时间和保持时间

建立时间 在时钟有效沿到来之前&#xff0c;数据必须维持一段时间保持不变&#xff0c;这段时间就是建立时间 Tsetup 1 基本概念 建立时间&#xff08;Setup Time&#xff09;&#xff1a; 在 SystemVerilog 中&#xff0c;建立时间是指在时钟信号的有效边沿&#xff08;例如…...

vue,router路由传值问题,引用官方推荐

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

AIDD-人工智能药物设计-AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例

AlphaFold系列&#xff1a;年终回顾&#xff0c;AlphaFold迄今为止的实际应用案例 01 引言 AlphaFold由 DeepMind 团队开发&#xff0c;最初在蛋白质结构预测竞赛 CASP 中惊艳亮相。随着 AlphaFold2 和后续版本的迭代进步&#xff0c;其精度和通用性不断提升&#xff0c;逐渐走…...

Scala语言的面向对象编程

Scala语言的面向对象编程 引言 在当今的软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一种非常强大且广泛使用的编程范式。Scala是一种现代编程语言&#xff0c;结合了面向对象编程和函数式编程的特性&#xff0c;非常适合用于大规模软件的开发。本文将介…...

MySQL学习记录1【DQL和DCL】

SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件&#xff0c;可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配&#xff0c;_匹配一个字段…...

验证码转发漏洞

开发人员有时候会以数组的形式接收用户的手机号并遍历执行&#xff0c;这时就可以在注册或登录页面填写两个手机号并点击发送验证码&#xff0c;这两个手机号会同时收到相同验证码&#xff0c;可以用任意一个手机号登录或注册&#xff0c;即验证码转发漏洞。 1、burpsuite内置…...

使用 C++ 实现神经网络:从基础到高级优化

引言 在现代机器学习中&#xff0c;神经网络已经成为最重要的工具之一。虽然 Python 提供了诸如 TensorFlow、PyTorch 等强大的机器学习库&#xff0c;但如果你想深入理解神经网络的实现原理&#xff0c;或者出于某些性能、资源限制的考虑&#xff0c;使用 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是一种现代的、跨平台的编程语言&#xff0c;广泛应用于Android开发、后端服务及多种其他软件开发领域。与Java类似&#xff0c;Kotlin也支持多种循环结构&#xff0c;包括for循环、while循环和do while循环。掌握这些循环结构是每个Kotlin开发者…...

基于CNN的人脸识别考勤管理系统实现

随着技术的不断进步&#xff0c;人脸识别技术已经在各行各业得到了广泛的应用&#xff0c;尤其在 考勤管理 上&#xff0c;它提供了更加智能、便捷、精准的解决方案。本篇博客将介绍如何基于 PyQt5 和 MySQL 实现一个 人脸识别考勤系统&#xff0c;并通过具体代码展示如何通过图…...

Android基于回调的事件处理

Android 中的回调机制&#xff1a;基于回调的事件处理详解 在 Android 开发中&#xff0c;回调&#xff08;Callback&#xff09;是一种常见的事件处理机制&#xff0c;主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比&#xff0c;回调机制更加灵活、通用&…...

postgis和地理围栏

postgis postgis是pg数据库的一个插件&#xff0c;除原数据类型外(int varchar)、新增了空间数据类型(geography和geometry)。比如我们新建一张道路表road(字段有名称varchar、建设时间timestamp、地理位置geometry)&#xff0c;可以将道路名字、建设时间存进去&#xff0c;同…...

《鸿蒙系统AI技术:筑牢复杂网络环境下的安全防线》

在当今数字化时代&#xff0c;复杂网络环境给智能系统带来了诸多安全挑战&#xff0c;而鸿蒙系统中的人工智能技术却展现出强大的安全保障能力&#xff0c;为用户在复杂网络环境中的安全保驾护航。 微内核架构&#xff1a;安全基石 鸿蒙系统采用微内核架构&#xff0c;将核心…...

SQL SERVER__RSN 恢复的深入解析

1. RSN 的工作原理 RSN 是 SQL Server 内部用于跟踪和管理备份和恢复操作顺序的编号。每次数据库备份&#xff08;包括完整备份、差异备份和事务日志备份&#xff09;都会生成一个唯一的 RSN。SQL Server 在恢复过程中使用 RSN 来确保备份文件按正确的顺序应用&#xff0c;从而…...

面试加分项: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 功能需求 时间范围选择器&#xff0c;最大时间选择尺度为一个月。 今天是 2025-01-09 示例1 选择 2025-01-02 日 禁用未来日期&#xff08;2025-01-09之后日期&#xff09; 禁用上月2号&#xff08;31日之前&#…...

【C】编译与链接

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

Github上传项目

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

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...