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

算法 之 贪心思维训练!

文章目录

  • 从最大/最小开始贪心
    • 2279.装满石头的背包的最大数量
    • 2971.找到最大周长的多边形
  • 从最左、最右开始贪心
    • 2712.使所有字符相等的最小成本
  • 划分型贪心
    • 1221.分割平衡字符串

  • 贪心策略在处理一些题目的时候能够带来意想不到的效果
    • 最小/最大开始贪心,优先考虑最小/最大的数,从小到大/从大到小贪心,在此基础上出现了反悔贪心
    • 最左/最右开始贪心,思考第一个数、最后一个数的贪心策略,把n个数的原问题转换为n-1个数(或者更少)的子问题(最左最右开始贪心的情况,一般是原来的数组是无法进行排序的)

从最大/最小开始贪心

2279.装满石头的背包的最大数量

2279.装满石头的背包的最大数量

在这里插入图片描述

思路分析:

  • 需要计算出每个背包还能装的石头的数量,然后进行升序排序,将总的还能放的时候逐一分配即可
class Solution:def maximumBags(self, capacity: List[int], rocks: List[int], additionalRocks: int) -> int:# 贪心的味道!n = len(rocks)need = [0]*n for i in range(n):need[i] = capacity[i] - rocks[i]# 升序排序need.sort()ans = 0# 直接写一个前缀和好了for i in range(1,n):need[i] += need[i-1]for i in range(n):if need[i] <= additionalRocks:ans += 1else:breakreturn ans

2971.找到最大周长的多边形

2971.找到最大周长的多边形

在这里插入图片描述

思路分析:

  • 首先,为了更好按照公式计算出边长的满足关系,应该先把边长进行排序,然后为了方便计算和的情况,接着使用这个前缀和进行计算
  • 在这里,应该意识到一个思想:要想让最后的总的周长最大,应该只需要从最长的边长进行枚举,判断先前的边是否满足和>nums[i],不可能会出现nums[s]-nums[e] 和这个 nums[i] 组成最长的周长的三角形的情况,因为这样都满足的话,那直接加上剩余的达到nums[0]的情况也是满足的
class Solution:def largestPerimeter(self, nums: List[int]) -> int:# 肯定得用贪心思想,直接把边进行排序,然后弄一个前缀和,将最大的边与前面所有情况进行比较即可n = len(nums)# 升序排序# 时间复杂度在这里nlognnums.sort()pre = [0]*n for i in range(n):if i == 0:pre[0] = nums[0]else:pre[i] = pre[i-1] + nums[i]ans = 0# 枚举这个除了nums[n-1]的左边的情况# 策略有问题,应该是移动这个for i in range(n-1,1,-1):if nums[i] < pre[i-1]:ans = ibreakreturn pre[ans] if ans != 0 else -1

从最左、最右开始贪心

2712.使所有字符相等的最小成本

2712.使所有字符相等的最小成本

在这里插入图片描述

灵神讲解第三题

  • 对于这种翻转的问题,我们可以有哪些思考的思路?
    • 是否和翻转的顺序有关?
    • 选择翻转左边还是右边?
    • 翻转之后的哪些不变量?
class Solution:def minimumCost(self, s: str) -> int:# 全部相等,那么最终的情况就是 全部是0或者全部是1# 根据模拟和贪心的思想,最终如果长度是偶数,那么变成n = len(s)# 怎么说ans = 0for i in range(n-1):if s[i] != s[i+1]:ans += min(i+1,n-(i+1))return ans

划分型贪心

1221.分割平衡字符串

1221.分割平衡字符串

在这里插入图片描述

思路分析:

  • 贪心思路:直接进行统计,如果没有出现,就加入 ,否则就计数+1,同时记录的集合清零
class Solution:def partitionString(self, s: str) -> int:n = len(s)ans = 0curnum = set()for i in range(n):# 如果已经在里面了if s[i] in curnum:ans+=1# 清零curnum = set()curnum.add(s[i])return ans + 1

相关文章:

算法 之 贪心思维训练!

文章目录 从最大/最小开始贪心2279.装满石头的背包的最大数量2971.找到最大周长的多边形 从最左、最右开始贪心2712.使所有字符相等的最小成本 划分型贪心1221.分割平衡字符串 贪心策略在处理一些题目的时候能够带来意想不到的效果 从最小/最大开始贪心&#xff0c;优先考虑最小…...

从0到1构建AI深度学习视频分析系统--基于YOLO 目标检测的动作序列检查系统:(1)视频信息的获取与转发

文章大纲 基于YOLO的动作序列检查系统架构设计系统架构图实时视频传输协议技术对比视频流 常见协议对比表三、WebSocket内网传输设计方案四、样例程序(Python + JavaScript)五、性能优化建议新兴技术预警参考文献提示词参考基于YOLO的动作序列检查系统架构设计 系统架构图 #…...

大语言模型学习--LangChain

LangChain基本概念 ReAct学习资料 https://zhuanlan.zhihu.com/p/660951271 LangChain官网地址 Introduction | &#x1f99c;️&#x1f517; LangChain LangChain是一个基于语言模型开发应用程序的框架。它可以实现以下应用程序&#xff1a; 数据感知&#xff1a;将语言模型…...

【PCIe 总线及设备入门学习专栏 4.5 -- PCIe 中断 MSI 与 MSI-X 机制介绍】

文章目录 PCI 设备中断机制PCIe 设备中断机制PCIe MSI 中断机制MSI CapabilityMSI-X 中断机制MSI-X capabilityMSI-X TablePBAMSI-X capability 解析MSI/MSI-X 操作流程扫描设备配置设备MSI 配置MSI-X 配置中断触发与处理PCI 设备中断机制 以前的PCI 设备是支持 物理上的 INTA…...

wxWidgets GUI 跨平台 入门学习笔记

准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…...

valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug

valgrind --toolhelgrind ./your_program 如果检测的对象是大型程序&#xff0c;可以设定仅在某些函数中开启 valgrind 的检测&#xff1a; Valgrind 提供了一些客户请求&#xff08;client requests&#xff09;&#xff0c;可以在代码中插入特定的宏来控制 Valgrind 的行为。…...

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中&#xff0c;忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程&#xff0c;该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…...

割平面法的理解

割平面法的理解 1. 简介 割平面法&#xff08;Cutting Plane Method&#xff09;用于求解整数规划问题&#xff0c;通过逐步添加线性约束&#xff08;割平面&#xff09;逼近整数解。本文以Gomory割平面法为例&#xff0c;结合简单示例拆解核心步骤。 2. 示例详解 问题描述 …...

[自动驾驶-传感器融合] 多激光雷达的外参标定

文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人&#xff0c;每个雷达的位置和姿态不同&#xff0c;需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系&#xff08…...

C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)

C 模板 C 中的模板是一项强大的功能&#xff0c;允许您编写通用代码&#xff0c;这意味着您可以编写可以处理不同数据类型的单个函数或类。这意味着您无需为要使用的每种数据类型编写单独的函数或类。 模板函数 要创建模板函数&#xff0c;请使用 关键字&#xff0c;后跟类型…...

AI---DevOps常备工具(‌AI-Integrated DevOps Essential Tools)

AI---DevOps常备工具 技术领域正在迅速发展&#xff0c;随着我们步入 2025 年&#xff0c;有一点是明确的&#xff1a;人工智能&#xff08;AI&#xff09;不再只是一个流行词&#xff0c;它是每个 DevOps 工程师都需要掌握的工具。随着云环境的复杂性增加、对更快部署的需求以…...

题目梳理2025[长期更新]

题目梳理 组合类题目(2025年3月5日) 组合总数1&#xff0c;组合总数2&#xff0c;组合总数3 -> 递归回溯的思想 组合总数4 -> 爬楼的思想&#xff0c;动态规划&#xff0c;确定递归边界&#xff0c;确定递归入口&#xff0c;最后一步怎么走的思想...

Maven 中 SNAPSHOT 版本与 RELEASE 版本的区别

Maven 仓库分为 Snapshot 快照仓库和 Release 发行仓库两种类型的仓库。Snapshot 快照仓库用于保存 SNAPSHOT 版本&#xff0c;Release 发行仓库用于保存 RELEASE 版本。 SNAPSHOT 是一种特殊的版本标识&#xff0c;主要用于表示项目的不稳定、正在开发中的版本&#xff0c;而…...

JavaScript 知识点整理

1. 什么是AST&#xff1f;它在前端有哪些应用场景&#xff1f; AST Abstract Syntax Tree抽象语法树&#xff0c;用于表达源码的树形结构 应用&#xff1a; Babel&#xff1a;一个广泛使用的 JS 编译器&#xff0c;将ES6 或 JSX 等现代语法转换为兼容性较好的 ES5 代码。Esl…...

迷你世界脚本出生点接口:Spawnport

出生点接口&#xff1a;Spawnport 彼得兔 更新时间: 2023-04-26 10:19:56 具体函数名及描述如下: 序号 函数名 函数描述 1 getSpawnPoint(...) 获取默认出生点 2 setSpawnPoint(...) 设置出生点位置 3 getChunkValidSpawnPos(...) 获取区块有效刷新点…...

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…...

利用行波展开法测量横观各向同性生物组织的生物力学特性|文献速递-医学影像人工智能进展

Title 题目 Measurement of biomechanical properties of transversely isotropic biological tissue using traveling wave expansion 利用行波展开法测量横观各向同性生物组织的生物力学特性 01 文献速递介绍 纤维嵌入结构在自然界中普遍存在。从脑白质&#xff08;罗曼…...

AR配置静态IP双链路负载分担示例

AR配置静态IP双链路负载分担示例 适用于大部分企业网络出口 业务需求&#xff1a; 运营商1分配的接口IP为100.100.1.2&#xff0c;子网掩码为255.255.255.252&#xff0c;网关IP为100.100.1.1。 运营商2分配的接口IP为200.200.1.2&#xff0c;子网掩码为255.255.255.248&am…...

文件操作(详细讲解)(1/2)

你好这里是我说风俗&#xff0c;希望各位客官点点赞&#xff0c;收收藏&#xff0c;关关注&#xff0c;各位对我的支持是我持续更新的动力&#xff01;&#xff01;&#xff01;&#xff01;第二期会马上更的关注我获得最新消息哦&#xff01;&#xff01;&#xff01;&#xf…...

[AI]从零开始的so-vits-svc歌声推理及混音教程

一、前言 在之前的教程中已经为大家讲解了如何安装so-vits-svc以及使用现有的模型进行文本转语音。可能有的小伙伴就要问了&#xff0c;那么我们应该怎么使用so-vits-svc来进行角色歌曲的创作呢&#xff1f;其实歌曲的创作会相对麻烦一些&#xff0c;会使用到好几个软件&#x…...

华为OD机试-停车场最大距离(Java 2024 E卷 100分)

题目描述 停车场有一排车位,用 0 表示空位,1 表示已停车。至少有一辆车停在车位上,也至少有一个空位。为了防剐蹭,需要找到一个空位,使得该空位与最近的车辆之间的距离最大。返回这个最大距离。 输入描述 一个用半角逗号分隔的停车标识字符串,停车标识为 0 或 1,0 表示…...

SpringMVC控制器定义:@Controller注解详解

文章目录 引言一、Controller注解基础二、RequestMapping与请求映射三、参数绑定与数据校验四、RestController与RESTful API五、控制器建议与全局处理六、控制器测试策略总结 引言 在SpringMVC框架中&#xff0c;控制器(Controller)是整个Web应用的核心组件&#xff0c;负责处…...

免费分享一个软件SKUA-GOCAD-2022版本

若有需要&#xff0c;可以下载。 下载地址 通过网盘分享的文件&#xff1a;Paradigm SKUA-GOCAD 22 build 2022.06.20 (x64).rar 链接: https://pan.baidu.com/s/10plenNcMDftzq3V-ClWpBg 提取码: tm3b 安装教程 Paradigm SKUA-GOCAD 2022版本v2022.06.20安装和破解教程-CS…...

学习threejs,使用LineBasicMaterial基础线材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.LineBasicMaterial1.…...

python保留字及作用

在 Python 中&#xff0c;保留字&#xff08;Reserved Keywords&#xff09;是具有特殊意义和用途的单词&#xff0c;不能用作变量名、函数名或标识符。以下是 Python 的保留字及其作用&#xff1a; Python 保留字列表 保留字作用False布尔值&#xff0c;表示假。None表示空值…...

java面试题(一)基础部分

1.【String】StringBuffer和StringBuilder区别&#xff1f; String对象是final修饰的不可变的。对String对象的任何操作只会生成新对象&#xff0c;不会对原有对象进行操作。 StringBuilder和StringBuffer是可变的。 其中StringBuilder线程不安全&#xff0c;但开销小。 St…...

Mac mini M4安装nvm 和node

先要安装Homebrew&#xff08;如果尚未安装&#xff09;。在终端中输入以下命令&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示操作完成Homebrew的安装。 安装nvm。在终端中输入以下命令&#xf…...

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装&#xff08;四&#xff09;&#xff1a;国内版火狐浏览器 Ubuntu系统会自带火狐浏览器&#xff0c;但该浏览器不是国内版的&#xff0c;如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯&#xff0c;建议重装火狐浏览器为国内版的…...

数据库的乐观锁和悲观锁

乐观锁&#xff08;Optimistic Locking&#xff09; 乐观锁是一种假设数据库操作不会发生冲突的锁定机制。在执行数据更新操作时&#xff0c;它并不会立刻加锁&#xff0c;而是先允许所有事务继续执行&#xff0c;并在提交时检查数据是否发生了变化。如果数据在读取后被其他事…...

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;...