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

算法D31 | 贪心算法1 | 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 

不用花心思去研究其规律, 没有思路就立刻看题解。

基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。  

学完贪心之后再去看动态规划,就会了解贪心和动规的区别。

理论基础 

代码随想录

455.分发饼干  

代码随想录

两个数组先排序,倒着看最大的cookie能满足的孩子,向前计数。

Python:

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()i = len(g)-1j = len(s)-1result = 0while j>=0 and i>=0:if s[j]>=g[i]:result += 1j -= 1i -= 1return result

C++:

C++版本用i--实现也算简洁。

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int result=0;int i = g.size()-1;int j = s.size()-1;for (int i=g.size()-1; i>=0; i--) {if (j>=0 && s[j]>=g[i]) {result++;j--;}}return result;}
};

376. 摆动序列  

代码随想录

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。

主要难点:要考虑平坡的情况。

Python:

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:n = len(nums)if n<=1: return nprev_diff = nums[1] - nums[0]n_diff = int(prev_diff!=0)for i in range(2, n):cur_diff = nums[i] - nums[i-1]if cur_diff * prev_diff < 0 or (prev_diff==0 and cur_diff!=0):n_diff += 1prev_diff = cur_diff return n_diff + 1

C++:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if (nums.size()<=1) return nums.size();int preDiff = 0;int curDiff = 0;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;}}return result;}
};

53. 最大子序和  

代码随想录

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。

全局最优:选取最大“连续和”

局部最优的情况下,并记录最大的“连续和”,可以推出全局最优

从代码角度上来讲:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为负数,那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。

这相当于是暴力解法中的不断调整最大子序和区间的起始位置

Python贪心:

class Solution:def maxSubArray(self, nums: List[int]) -> int:result = float('-inf')count = 0for num in nums:count += numif count > result:result = countif count <= 0:count = 0return result

Python动态规划:

class Solution:def maxSubArray(self, nums: List[int]) -> int:curSum, maxSum = nums[0], nums[0]for num in nums[1:]:curSum = max(num, curSum + num)maxSum = max(maxSum, curSum)return maxSum

C++贪心:

class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_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; }
};

C++动态规划:

class Solution {
public:int maxSubArray(vector<int>& nums) {int curSum = nums[0];int maxSum = nums[0];for (int i=1; i<nums.size(); i++) {curSum = max(nums[i], curSum+nums[i]);maxSum = max(maxSum, curSum);}return maxSum;}
};

相关文章:

算法D31 | 贪心算法1 | 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律&#xff0c; 没有思路就立刻看题解。 基本贪心的题目 有两个极端&#xff0c;要不就是特简单&#xff0c;要不就是死活想不出来。 学完贪心之后再…...

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目&#xff0c;记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…...

如何获取pnpm存储目录

现在你可以做 得到&#xff1a;\path\to.pnpm-store\v3 pnpm store path注&#xff1a;从v7.0.0开始&#xff0c;pnpm 存储位于不同的文件夹中。它将位于$XDG_DATA_HOMELinux Linux : ~/.local/share/pnpm/store (default) Windows : C:\Users\YOUR_NAME\AppData\Local\pn…...

QT两个类之间使用信号槽

在做一些东西的时候&#xff0c;习惯性的引入头文件并且调用&#xff0c;因此出现了很多bug,qt的信号槽机制便可以有效的避免一些问题。 A类 #ifndef A_H #define A_H#include <QObject> #include <QDebug> class A : public QObject {Q_OBJECT public:explicit A…...

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…...

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…...

小红书3C家电行业种草营销策略打法,纯干货

小红书作为国内种草营销的鼻祖&#xff0c;拥有庞大的年轻用户群体&#xff0c;特别是在3C家电行业&#xff0c;小红书的种草营销效应更是明显。据相关数据显示&#xff0c;小红书3C家电行业的用户关注度持续攀升&#xff0c;尤其是90后和00后&#xff0c;他们对新鲜事物的接受…...

防火墙的内容安全

目录 1. 内容安全 1.1 IAE引擎 DPI---深度包检测技术 DFI---深度流检测技术 结论(优缺点)&#xff1a; 1.2 入侵防御&#xff08;检测&#xff09;(IPS) IPS的优势: 入侵检测的方法: 入侵检测的流程 签名 查看预定义签名的内容 新建自定义签名 入侵防御的检测…...

Redis 管道详解

Redis 管道 关键词&#xff1a;Pipeline Pipeline 简介 Redis 是一种基于 C/S 模型以及请求/响应协议的 TCP 服务。通常情况下&#xff0c;一个 Redis 命令的请求、响应遵循以下步骤&#xff1a; 客户端向服务端发送一个查询请求&#xff0c;并监听 Socket 返回&#xff08…...

【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理

一、缓存穿透 1、概念 缓存穿透&#xff08;查不到数据&#xff09;&#xff0c;是指当用户想要查询数据的时候&#xff0c;会先去Redis中取命中&#xff0c;如果Redis中没有该数据&#xff0c;那么就会向数据库中去查找数据。如果数据库中也没有&#xff0c;则该次查询结果失…...

Rocky Linux安装部署Elasticsearch(ELK日志服务器)

一、Elasticsearch的简介 Elasticsearch是一个强大的开源搜索和分析引擎&#xff0c;可用于实时处理和查询大量数据。它具有高性能、可扩展性和分布式特性&#xff0c;支持全文搜索、聚合分析、地理空间搜索等功能&#xff0c;是构建实时应用和大规模数据分析平台的首选工具。 …...

Linux浅学笔记04

目录 Linux实用操作 Linux系统下载软件 yum命令 apt systemctl命令 ln命令 日期和时区 IP地址 主机名 网络传输-下载和网络请求 ping命令 wget命令 curl命令 网络传输-端口 进程 ps 命令 关闭进程命令&#xff1a; 主机状态监控命令 磁盘信息监控&#xff1a…...

【Day59】代码随想录之动态规划_647回文子串_516最长回文子序列

文章目录 动态规划理论基础动规五部曲&#xff1a;出现结果不正确&#xff1a; 1. 647回文子串2. 516最长回文子序列 动态规划理论基础 动规五部曲&#xff1a; 确定dp数组 下标及dp[i] 的含义。递推公式&#xff1a;比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初始化dp数组…...

ECLIP

denote the representation of the positive prompt produced by the momentum model as h ξ i h_{\xi}^{i} hξi​ 辅助信息 作者未提供代码...

STM32 +合宙1.54“ 电子墨水屏(e-paper)驱动显示示例

STM32 合宙1.54“ 电子墨水屏&#xff08;e-paper&#xff09;驱动显示示例 &#x1f4cd;相关篇《Arduino框架下ESP32/ESP8266合宙1.54“ 电子墨水屏&#xff08;e-paper&#xff09;驱动显示示例》&#x1f516;程序是从GooDisplay品牌和微雪电子下同型号规格墨水屏的示例程序…...

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign&#xff08;签名&#xff09;进行请求&#xff0c;各接口对sign的签名内容、方式可能不一样&#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串&#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…...

uni-app nvue vue3 setup中实现加载webview,解决nvue中获取不到webview实例的问题

注意下面的方法只能在app端使用&#xff0c; let wv plus.webview.create("","custom-webview",{plusrequire:"none", uni-app: none, width: 300,height:400,top:uni.getSystemInfoSync().statusBarHeight44 }) wv.loadURL("https://ww…...

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈&#xff0c;IPD流程是一种高度结构化的产品开发流程&#xff0c;它集成了业界很多优秀的产品开发方法论&#xff0c;像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点&#xff0c;对全流程的IPD进行合适的裁剪…...

uniapp android 原生插件开发-测试流程

前言 最近公司要求研究一下 uniapp 的 android 原生插件的开发&#xff0c;为以后的工作做准备。这篇文章记录一下自己的学习过程&#xff0c;也帮助一下有同样需求的同学们 : ) 一、下载安装Hbuilder X , Android studio&#xff08;相关的安装配置过程网上有很多&#xff0c;…...

MyCAT从入门到实战(配置文件介绍)

用户&#xff08;user&#xff09; 配置文件位置mycat/conf/user/root.user.json。这个配置文件主要是用来配置MyCAT的登录用户 的&#xff0c;也就是我们连接8066这个端口的用户信息。 [rootservice bin]# cat /usr/local/mycat/conf/users/root.user.json {"dialect&q…...

别再只盯着效率了!聊聊DCDC电源在轻载时,PSM、Burst、FCM三种模式到底该怎么选?

DCDC电源轻载模式深度解析&#xff1a;PSM、Burst、FCM的工程实践指南 在IoT设备和便携式电子产品的设计中&#xff0c;电源管理芯片的轻载性能往往成为决定产品续航能力的关键因素。某次深夜调试中&#xff0c;当我用示波器捕捉到一颗纽扣电池供电的传感器模组在待机时产生的异…...

构建跨平台物联网协议解析器:基于CGO与LuaJIT的Go/Lua混合编程实践

1. 物联网协议解析的挑战与混合编程优势 在物联网项目中&#xff0c;协议解析往往是让人头疼的问题。不同厂家的设备使用不同的通信协议&#xff0c;有的基于二进制格式&#xff0c;有的采用文本协议&#xff0c;还有各种自定义的私有协议。我曾经接手过一个项目&#xff0c;需…...

【技术解析】安卓与iOS应用通过URI协议唤醒高德地图导航:免费策略与商用SDK的成本抉择

1. 高德地图URI唤醒与SDK集成的本质区别 第一次接触高德地图API时&#xff0c;我和很多开发者一样纠结&#xff1a;到底该用URI协议唤醒还是直接集成SDK&#xff1f;实测下来发现这两种方案完全是不同的技术路线。URI协议唤醒&#xff08;比如androidamap://&#xff09;就像你…...

【Linux】网络基础概念

1. 网络基础总结来说&#xff1a;计算机不能独立使用&#xff0c;必须进行协作&#xff0c;注定了计算机之间要进行连接通信&#xff0c;就产生了网络网络是局部产生的&#xff0c;是从局部到整体的&#xff08;网络互联 ----> 局域网 ----> 广域网 ----> 更大的网&am…...

尝试 Gemini CLI 替代Claude,Jeecg skills基本通畅,但遇致命问题

AI Agent 使用体验 | JeecgBoot 团队将日常 Claude Code 工作流迁移到 Gemini CLI 的阶段性总结为什么要换 Gemini CLI JeecgBoot 低代码团队平时主力用 Claude Code 做代码生成、文档写作、重构脚本。但 Claude 最近实名认证 频繁封号的事闹得人心惶惶——身边已经有好几个账…...

SVG数据处理架构对比:如何选择最适合程序化操作的可扩展转换引擎

SVG数据处理架构对比&#xff1a;如何选择最适合程序化操作的可扩展转换引擎 【免费下载链接】svgson Transform svg files to json notation 项目地址: https://gitcode.com/gh_mirrors/sv/svgson 在前端开发和数据可视化项目中&#xff0c;SVG图形数据的程序化处理一…...

从论文到部署:手把手在OpenPCDet上复现IA-SSD(含KITTI数据集评测指南)

从论文到部署&#xff1a;手把手在OpenPCDet上复现IA-SSD&#xff08;含KITTI数据集评测指南&#xff09; 点云目标检测技术正在自动驾驶、机器人导航等领域掀起新一轮效率革命。当大多数研究者还在为提升几个百分点的检测精度绞尽脑汁时&#xff0c;IA-SSD以85FPS的推理速度刷…...

vue基于springboot成人自考本科远程教育网站设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析考试与评估功能后台管理功能技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户模块 …...

SENT vs PWM vs CAN:为你的汽车电子项目选对通信协议(成本/速度/复杂度全对比)

SENT vs PWM vs CAN&#xff1a;为你的汽车电子项目选对通信协议&#xff08;成本/速度/复杂度全对比&#xff09; 在汽车电子系统的设计中&#xff0c;选择合适的通信协议往往决定了项目的成败。面对SENT、PWM、CAN等不同方案&#xff0c;工程师需要在成本、速度、抗干扰性和实…...

告别HAL迷茫:在STM32F103上体验LL库操控GPIO的极致效率(附代码对比)

突破HAL瓶颈&#xff1a;STM32F103的LL库GPIO开发实战与性能优化 在嵌入式开发领域&#xff0c;效率就是生命线。当你的STM32项目遇到性能瓶颈时&#xff0c;是否曾思考过HAL库可能正在悄悄吞噬宝贵的时钟周期&#xff1f;本文将带你深入LL库的世界&#xff0c;揭示如何通过寄存…...