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

代码随想录算法训练营day27

代码随想录算法训练营

—day27

文章目录

  • 代码随想录算法训练营
  • 前言
  • 一、贪心算法理论基础
  • 二、455.分发饼干
  • 三、376. 摆动序列
  • 53. 最大子数组和
  • 总结


前言

今天是算法营的第27天,希望自己能够坚持下来!
今日任务:
● 贪心算法理论基础
● 455.分发饼干
● 376. 摆动序列
● 53. 最大子序和


一、贪心算法理论基础

文章讲解
视频讲解

题目大纲:
在这里插入图片描述

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
贪心没有套路,说白了就是常识性推导加上举反例。贪心的题目要么很简单,要么没做过就想不出来思路。遇到没思路的题目不要想太久,马上看题解积累思路。


二、455.分发饼干

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

思路:

  1. 这里的局部最优是,尽量用大的饼干去满足大的胃口(或者反过来用小的饼干满足小的胃口)
  2. 先对饼干和胃口排序
  3. 从后往前遍历胃口,优先用最大的饼干去匹配大胃口
  4. 如果满足的话则饼干index往前(这里要注意index>=0),累加计数。

代码如下:

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {//先排列,升序sort(g.begin(), g.end());sort(s.begin(), s.end());int index = s.size() - 1;int result = 0;for (int i = g.size() - 1; i >= 0; i--) { //遍历胃口if (index >= 0 && s[index] >= g[i]) { //遍历饼干,用最大的饼干匹配index--;result++;}}return result;}
};

三、376. 摆动序列

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

在这里插入图片描述
局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值(头和尾)。

整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。

因为题目要求的是最长摆动子序列的长度,所以只需要统计数组的峰值数量就可以了

思路:

  1. 用当前元素分别和前一元素,后一元素的差的正负来判断是否有摆动;
  2. preDiff = nums[i + 1] - nums[i],curDiff = nums[i] - nums[i - 1];
  3. preDiff和curDiff一正一负时说明出现了摆动。

这是我们思考本题的一个大体思路,但本题要考虑三种情况:
情况一:上下坡中有平坡
在这里插入图片描述
平坡有4个2,那么考虑删掉左边3个2的话,遍历到最后一个2时的条件就是prediff = 0 && curdiff < 0,所以判断峰值的条件就应该是:
(preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)

情况二:数组首尾两端
在这里插入图片描述
题目中说了,如果只有两个不同的元素,那摆动序列也是 2。
那么为了统计到这种情况,默认最右端是一个摆动,result初始化为1,且遍历只遍历到倒数第二个,i < nums.size() - 1;再加上情况一讨论的判断条件 curDiff > 0 && preDiff <= 0,那么result++,就会得到答案2.

情况三:单调坡中有平坡
在这里插入图片描述
为了避免nums[1]和nums[2]都各自统计了一次摆动,只需要在这个坡度摆动变化的时候,更新 prediff 就行(也就是图上的1),这样 prediff 在 单调区间有平坡的时候 就不会发生变化,造成我们的误判。

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() <= 1) return nums.size();int preDiff = 0; //nums[i + 1] - nums[i]int curDiff = 0; //nums[i] - nums[i - 1]int result = 1; //默认最右边有一个峰值//只遍历到倒数第二个,因为最右边一个已经算成一个峰值了for (int i = 0; i < nums.size() - 1; i ++) {curDiff = nums[i + 1] - nums[i];//出现峰值if ((preDiff <= 0 && curDiff > 0) || (preDiff>= 0 && curDiff < 0)) {result++;preDiff = curDiff; //当遇到摆动变化时才更新prediff}}return result;}
};

53. 最大子数组和

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

思路:

  1. 当累加和是负数时,继续往后加都是让后面的数更加小
  2. 所以当累加和为负时,舍弃掉当前的累加,重新从下一个元素开始累加,并且在过程中记录累加的最大值。

代码如下:

class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT_MIN;int count = 0;for (int i = 0; i < nums.size(); i ++) {count += nums[i]; //计算累加值if (count > result) result = count; //记录最大值if (count < 0) count = 0; //当连续和为负数时,舍弃累加值,重新累加}return result;}
};

总结

今天第一天的贪心算法,代码其实都不难,难的是思路,需要多积累一些解题思路才行。

明天继续加油!

相关文章:

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#xff1a; ● 贪心算法理论基础 ● 455.…...

python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能

import deepxde as dde import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 设置时空计算域 Lx 1 # x 范围从 0 到 1 Ly 1 # y 范围从 0 到 1 Lt 0.05 # t 范围从 0 到 0.05 geom dde.geometry.Rectangle([0, 0], [Lx, Ly]) # 空间域 timed…...

【Go】:深入解析 Go 1.24:新特性、改进与最佳实践

前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新&#xff0c;并通过具体示例展示这些变化如何影响日常开发工作&#xff0c;确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...

VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。

以下是一些常用的 npm 和 cnpm 命令&#xff0c;涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源&#xff08;可以提高安装速度&#xff09;&#xff1a; bash复制代码 npm config set registry https://registry…...

【SpringBoot】@Value 没有注入预期的值

问题复现 在装配对象成员属性时&#xff0c;我们常常会使用 Autowired 来装配。但是&#xff0c;有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同&#xff0c;使用 Autowired 一般都不会设置属性值&#xff0c;而 Value 必须指定一个字符串值&#xff0c;因为其…...

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...

js实现一个可以自动重链的websocket客户端

class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项&#xff08;例如重试间隔、最大重试次数等&#xff09;this.retryInterval options.retryInterval || 1000; // 重试间隔&#…...

企业总部和分支通过GRE VPN互通

PC1可以ping通PC2 1、首先按照地址表配置ip地址 2、分别在AR1和AR3上配置nat 3、配置GRE a 创建tunnel接口&#xff0c;并选择tunnel协议为GRE&#xff0c;为隧道创建一个地址&#xff0c;用作互联 b 为隧道配置源地址或者源接口&#xff0c;这里选择源接口&#xff1b;再为…...

油猴支持阿里云自动登陆插件

遇到的以下问题&#xff0c;都已在脚本中解决&#xff1a; 获取到的元素赋值在页面显示&#xff0c;但是底层的value并没有改写&#xff0c;导致请求就是获取不到数据元素的加载时机不定&#xff0c;尤其是弱网情况下&#xff0c;只靠延迟还是有可能获取不到&#xff0c;且登陆…...

【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)

一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...

iOS - runtime总结

详细总结一下 Runtime 的核心内容&#xff1a; 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...

第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题

思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了&#xff0c;但是千篇一律&#xff0c;看了跟没看没有太大区别。 在生产中&#xff0c;我们往往会通过 DTS 工具将 binlog 导入到 Kafka&#xff0c;再通过 Kafka 消费 binlog&…...

Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】

挑战&#xff1a;捕获大型水生哺乳动物&#xff08;如鲸鱼&#xff09;的数据&#xff0c;搭建全彩3D模型&#xff0c;用于水生野生动物的法医鉴定、研究和保护工作。 解决方案&#xff1a;Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...

PythonQT5打包exe线程使用

打包&#xff1a; pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改&#xff1a;test.spec 一般项目里面需要用的资源文件&#xff0c;比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...

【Powershell】Windows大法powershell好(二)

PowerShell基础&#xff08;二&#xff09; 声明&#xff1a;该笔记为up主 泷羽的课程笔记&#xff0c;本节链接指路。 警告&#xff1a;本教程仅作学习用途&#xff0c;若有用于非法行为的&#xff0c;概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...

前端学习-环境this对象以及回调函数(二十七)

目录 前言 目标 环境对象 作用 环境对象this是什么&#xff1f; 判断this指向的粗略规则是什么&#xff1f; 回调函数 目标 常见的使用场景 综合案例&#xff1a;Tab任务栏切换 总结 前言 男儿何不带吴钩&#xff0c;收取关山五十州 目标 能够分析判断函数运行在不…...

Element-plus、Element-ui之Tree 树形控件回显Bug问题。

需求&#xff1a;提交时&#xff0c;需要把选中状态和半选中状态 的数据id提交。如图所示&#xff1a; 数据回显时&#xff0c;会出现代码如下&#xff1a; <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...

互联网全景消息(10)之Kafka深度剖析(中)

一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步

Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;5&#xff09;&#xff1a;将主库复制到备库并启动同步 目录 Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;5&#xff09;&#xff1a;将主库复制到备库并启动…...

pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)

pytorch小记&#xff08;一&#xff09;&#xff1a;pytorch矩阵乘法&#xff1a;torch.matmul&#xff08;x, y&#xff09;/ x y 代码代码 1&#xff1a;torch.matmul(x, y)输入张量&#xff1a;计算逻辑&#xff1a;输出结果&#xff1a; 代码 2&#xff1a;y y.view(4,1)…...

PyTorch环境配置常见报错的解决办法

目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook&#xff0c;new的时候有对应的环境&#xff0c;并且可以跑通所有的import code。 第一步&#xff1a;…...

罗永浩再创业,这次盯上了 AI?

罗永浩&#xff0c;1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭&#xff0c;是一名朝鲜族人&#xff1b;早年在新东方授课&#xff0c;2004年当选 “网络十大红人” &#xff1b;2006年8月1日&#xff0c;罗永浩创办牛博网&#xff1b;2008年5月&#xff0c;罗永浩注册…...

VUE3 provide 和 inject,跨越多层级组件传递数据

provide 和 inject 是 Vue 3 提供的 API&#xff0c;主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中&#xff0c;跨越多层组件传递数据&#xff0c;而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...

git打补丁

1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞&#xff0c;作者进行了修复&#xff0c;我们可以通过使用git补丁的方式&#xff0c;将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量&#xff0c;生成…...

机械燃油车知识图谱、知识大纲、知识结构(持续更新...)

一、发动机 曲柄连杆机构 配气机构 点火系统 起动系统 燃油供给系统 润滑系统 冷却系统 二、底盘 &#xff08;一&#xff09;传动系统 1、离合器 2、变速器 3、万向传动装置 4、驱动桥 &#xff08;二&#xff09;行驶系统 1、车架 2、车桥 3、悬架 4、车轮 &a…...

Vue3学习总结

一、Vue 3 基础搭建与核心语法 1.创建 Vue 3 应用 在项目的入口文件 main.js 中&#xff0c;通过以下代码创建 Vue 3 应用实例&#xff1a; import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app); 这几行代码的作用是引入…...

Type-C双屏显示器方案

在数字化时代&#xff0c;高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步&#xff0c;一款结合了便携性和高效视觉输出的设备——双屏便携屏&#xff0c;逐渐崭露头角&#xff0c;成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...

【读书与思考】焦虑与内耗

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 今天一个朋友和我说&#xff0c;最近比较焦虑和内耗&#xff0c;无心工作和学习&#xff0c;我问他你焦虑内耗的时候&#xff0c;时间主要花在哪了&#xff0c;他告诉我说主要花在看有关移…...

基于python的网页表格数据下载--转excel

基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...

Vue.js开发入门:从零开始搭建你的第一个项目

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊 Vue.js&#xff0c;一个超火的前端框架。如果你是编程小白&#xff0c;别怕&#xff0c;跟着我一步步来&#xff0c;保证你能轻松上手&#xff0c;搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...

上海市工程质量建设协会网站/b2c有哪些电商平台

SQL 函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boo…...

可以做网站的语言/提高销售的10种方法

CSS Sprites是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去&#xff0c;这样一来&#xff0c;当访问该页面时&#xff0c;载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言&#xff0c;不高于200KB…...

北京公司网站设计价格/seo方案

在canvas API中,我们发现只提供了画实线的方法实现,并没有虚线的相关方法,那么如何实现画虚线呢?现实中,虚线是由一小段小段的实线线段组成,那么只要我们通过画出等长度的线段就可以组成我们想要的虚线.下面我们就可以根据上面的原理来实现虚线的画法.如下:var context docum…...

网站建设不完整之前不建议推行/他达拉非的副作用和危害

1&#xff0c;转载于:https://www.cnblogs.com/iOS-mt/p/8242198.html...

网站 营销/常见的营销型网站

get 方式发送 $.get(url,{ 传入参数 }, function(响应体){ }, ‘json’)&#xff1b; 或者 $.ajax({ url&#xff1a; ‘http://127.0.0.1:8000, data: { a:100}, type : GET, dataType:‘json’, success:function(({ 成功回调 }, error:function(({ 失败回调 }, timeiout:200…...

怎样做班级网站/搜索引擎优化的方法有哪些

ie6下不支持PNG 24 的透明度&#xff1b; 所以保存为PNG 8最为靠谱。杂边选择“无”&#xff1b; PS我玩的还可以。大家有问题可以问我。 网页制作时记得把PS首选项的单位改成像素&#xff1b; 今天试了一下切图插件:cutterman 这个插件有个BUG 会自动覆盖重名文件。&#xff0…...