每日算法-250510
每日算法学习记录 - 250510
1. LeetCode 2086. 喂食仓鼠的最小食物桶数
题目描述:
解题思路
这是一个典型的贪心问题。我们的目标是用最少的食物桶喂饱所有仓鼠。
解题过程
核心思想是:当遇到一只仓鼠时,如何放置食物桶才能最有效地利用这个桶。
- 遍历字符串
hamsters
。 - 当遇到一只仓鼠
s[i] == 'H'
时:- 优先考虑在其右侧(
i+1
)放置食物桶。 这样做是因为放在右边的食物桶s[i+1]
不仅可以喂饱当前仓鼠s[i]
,还有可能喂饱它右边的仓鼠s[i+2]
(如果s[i+2]
也是 ‘H’)。这使得一个桶的效益最大化。 - 如果右侧
s[i+1]
是空地'.'
:我们在此处放置一个桶,计数器ret
加 1。由于s[i+1]
上的桶可以喂饱s[i]
和潜在的s[i+2]
,我们可以跳过检查s[i+1]
(现在是桶) 和s[i+2]
(已被喂饱)。因此,我们将索引i
向前移动 2 格(i += 2
),加上循环自身的i++
,相当于下次从i+3
开始检查。 - 如果右侧不能放置(比如
i+1
越界,或者s[i+1]
是另一只仓鼠 ‘H’),再考虑在其左侧(i-1
)放置食物桶。 - 如果左侧
s[i-1]
是空地'.'
:我们在此处放置一个桶,计数器ret
加 1。这个桶喂饱了s[i]
。索引i
正常通过循环的i++
后移。 - 如果左右两侧都无法放置食物桶:那么当前仓鼠
s[i]
无法被喂饱,根据题意返回 -1。
- 优先考虑在其右侧(
- 遍历完成后,返回
ret
。
复杂度分析
- 时间复杂度: O ( N ) O(N) O(N), 其中 N N N 是字符串
hamsters
的长度。我们只需要遍历一次字符串。 - 空间复杂度: O ( N ) O(N) O(N) 或 O ( 1 ) O(1) O(1)。
代码实现
class Solution {public int minimumBuckets(String hamsters) {int ret = 0;char[] s = hamsters.toCharArray();int n = s.length;for (int i = 0; i < n; i++) {if (s[i] == 'H') {char left = i > 0 ? s[i - 1] : 'H';char right = i < n - 1 ? s[i + 1] : 'H';if (right == '.') {ret++;i += 2;} else if (left == '.') {ret++;} else {return -1;}}}return ret;}
}
2. LeetCode 2571. 将整数减少到零需要的最少操作数
题目描述:
解题思路
这个问题可以通过分析数字的二进制表示,并采用贪心策略来解决。目标是每次操作都尽可能有效地减少 n
或将其转化为更容易处理的形式(更接近2的幂)。
解题过程
我们将整数 n
视为其二进制表示。每次操作我们可以选择加上或减去一个2的幂。
-
获取最低位的 ‘1’:
使用位运算lowbit = n & (-n)
可以得到n
的二进制表示中,最低位的那个 ‘1’ 以及它之后的所有 ‘0’ 组成的数。这个lowbit
值本身就是一个2的幂,对应题目中可以操作的数。 -
贪心决策:
对于当前的n
和其lowbit
:- 情况1:
lowbit
的左边(更高一位)也是 ‘1’。
例如,n = 6 (0110_2)
,lowbit = 2 (0010_2)
。此时lowbit
的左边是 ‘1’。
这种情况通过(n & (lowbit << 1)) > 0
来判断。
我们选择n = n + lowbit
。6 + 2 = 8 (1000_2)
。
这样做的好处是,...011...
形式的位序列通过加法可以变成...100...
,有效地将两个(或更多连续的)'1’s 通过进位合并,从而可能更快地减少 ‘1’ 的总数或简化数字结构。 - 情况2:
lowbit
的左边是 ‘0’。
例如,n = 4 (0100_2)
,lowbit = 4 (0100_2)
。或者n = 10 (1010_2)
,lowbit = 2 (0010_2)
。
这种情况是(n & (lowbit << 1)) == 0
。
我们选择n = n - lowbit
。4 - 4 = 0
或10 - 2 = 8 (1000_2)
。
这样做直接消除了最低位的 ‘1’。
- 情况1:
-
迭代与计数:
每次操作后,操作数ret
加 1。
循环继续,直到n
变为0。 -
特殊循环终止条件 (优化):
当n
变成一个2的幂时(即(n & (n - 1)) == 0
且n > 0
),我们知道只需要再进行一次操作(减去n
本身)就可以将其变为0。
代码中的循环条件(n & (n - 1)) != 0
利用了这一点:当n
成为2的幂或0时,循环终止。
ret
初始化为1
。如果n
初始就是2的幂,循环不进入,直接返回1
(一次操作)。如果n
不是2的幂,进入循环,每执行一次n += lowbit
或n -= lowbit
,ret
增加。当循环结束时,n
必然是一个2的幂(因为n
不会是0退出循环,除非一开始就是0,但题目约束1 <= n <= 10^5
)。此时的ret
值已经包含了将这个最终的2的幂减到0的那次操作。
复杂度分析
- 时间复杂度: O ( log N ) O(\log N) O(logN)。在二进制表示下,每次操作要么消除一个 ‘1’,要么通过进位合并 ‘1’,总体上使问题规模减小。操作的次数与
N
的二进制位数大致成正比。 - 空间复杂度: O ( 1 ) O(1) O(1)。我们只需要常数级别的额外空间。
代码实现
class Solution {public int minOperations(int n) {int ret = 1;while ((n & (n - 1)) != 0) {int lowbit = n & (-n);if ((n & (lowbit << 1)) > 0) {n += lowbit;} else {n -= lowbit;}ret++;}return ret;}
}
相关文章:

每日算法-250510
每日算法学习记录 - 250510 1. LeetCode 2086. 喂食仓鼠的最小食物桶数 题目描述: 解题思路 这是一个典型的贪心问题。我们的目标是用最少的食物桶喂饱所有仓鼠。 解题过程 核心思想是:当遇到一只仓鼠时,如何放置食物桶才能最有效地利用这个桶。 …...

渗透测试行业术语1
渗透测试行业术语1 1. 肉鸡 所谓“肉鸡”是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是 WINDOWS 系统,也可以是 UNIX/LINUX 系统可以是普通的个人电脑,也可以是大型的服务器我们可以象操作自己的电脑那样来操…...
[思维模式-25]:《本质思考力》-6- 马哲的三大规律:对立统一规律、质量互变规律、否定之否定规律,以及在计算机领域中的体现
一、马克思主义哲学的三大规律 马克思主义哲学的三大规律是对立统一规律、质量互变规律、否定之否定规律,它们共同构成了唯物辩证法的核心内容,揭示了事物发展的根本动力、过程形式和方向特征。 以下是对这三大规律的详细阐述: 1、对立统一…...
Ubuntu22.04安装显卡驱动/卸载显卡驱动
报错 今日输入nvidia-smi报错,在安装了535和550,包括560都没办法解决,但是又怕乱搞导致环境损坏,打算把显卡卸载然后重新安装系统默认推荐版本的显卡驱动 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸载…...
不同类型的 SAP 项目
目录 1 实施项目 2 SAP S/4 HANA 升级项目 3 数据迁移项目 4 优化项目 5 Rollout 项目 6 运维项目 1 实施项目 企业第一次用 SAP 系统,从硬件搭建到安装 SAP、根据业务流程做配置、开发、培训业务、测试系统直到系统上线。 SAP S/4 HANA ACTIVATE 实施方法论…...

【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通
使用 LLaMA-Factory 进行模型微调:从入门到精通 一、环境搭建:奠定微调基础(一)安装依赖工具(二)创建 conda 环境(三)克隆仓库并安装依赖 二、数据准备:微调的基石&#…...
TWAS / FUSION
FUSION 是一套用于执行转录组范围和调控组范围关联研究(TWAS 和 RWAS)的工具。它通过构建功能/分子表型的遗传成分的预测模型,并使用 GWAS 汇总统计数据预测和测试该成分与疾病的关联,目标是识别 GWAS 表型与仅在参考数据中测量的…...
矩阵短剧系统:如何用1个后台管理100+小程序?深度解析多端绑定技术
短剧行业效率革命!一套系统实现多平台内容分发、数据统管与流量聚合 在短剧行业爆发式增长的今天,内容方和运营者面临两大核心痛点:多平台运营成本高与流量分散难聚合。传统模式下,每个小程序需独立开发后台,导致人力…...

使用Python 打造多格式文件预览工具 — 图、PDF、Word、Excel 一站式查看
在日常办公或文件管理场景中,我们经常面临这样的问题:在一个文件夹中短时间内产生了大量不同类型的文件(如图片、PDF、Word、Excel),我们需要快速浏览和筛选这些文件的内容,却不希望一个个打开它们。有没有…...

[docker基础四]容器虚拟化基础之 LXC
目录 一 认识LXC 二 LXC容器操作实战 1)实战目的 2)基础知识 lxc-checkconfig lxc-create lxc-start lxc-ls lxc-info lxc-attach lxc-stop lxc-destory 3)安装LXC(我的是Ubuntu) 4)操作实战 1. 检查 lxc 是否运行…...

路由策略和策略路由的区别以及配置案例
区别 路由策略:路由策略是通过ACL等方式控制路由发布,让对方学到适当路由条目,比如有20条路由,只想让某个路由器学到10条,可以通过路由策略进行过滤。 策略路由:策略路由是通过定义策略和应用,…...

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL
ICLR 2025 spotlight paper 构建能够在少量样本下学习出优良策略的深度强化学习(RL)智能体一直是一个极具挑战性的任务。为了提高样本效率,近期的研究尝试在每获取一个新样本后执行大量的梯度更新。尽管这种高更新-数据比(UTD&am…...

PyTorch API 10 - benchmark、data、批处理、命名张量
基于 PyTorch 2.7 文章目录 基准测试工具 - torch.utils.benchmarktorch.utils.bottlenecktorch.utils.checkpointtorch.utils.cpp_extensiontorch.utils.data数据集类型映射式数据集可迭代式数据集 数据加载顺序与采样器加载批处理与非批处理数据自动批处理(默认情…...

后缀表达式+栈(详解)(c++)
前言 很抱歉,上一期没有介绍栈stack的用法,今天简要介绍一下,再讲讲后缀表达式,用stack栈做一些后缀表达式的练习。 栈 栈stack是c中系统给出的栈,有了它,就不用自己创建栈啦! 头文件 栈sta…...

[C++类和对象]构造函数和析构函数
类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗? 并不是,任何类在什么都不写时,编译器会自动生成以下6 个默认成员函数。 默认成员函数:用户没有显式实现,编译器会…...

onenet连接微信小程序(mqtt协议)
一、关于mqtt协议 mqtt协议常用于物联网,是一种轻量级的消息推送协议。 其中有三个角色,Publisher设备(客户端)发布主题到服务器,其他的设备通过订阅主题,获取该主题下的消息,Publisher可以发…...
使用 JAX-RS 创建 REST 服务/微服务
REST(表述性状态转移)是一种基于 Web 标准和 HTTP 协议的架构风格,广泛用于构建可扩展、无状态且易于消费的 Web 服务。JAX-RS(Java API for RESTful Web Services)是 Java 提供的标准 API,通过注解简化了 RESTful Web 服务的开发和部署。JAX-RS 允许开发者使用 Java 类和…...

人脸真假检测:SVM 与 ResNet18 的实战对比
在人工智能蓬勃发展的当下,人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而,随着人脸合成技术的日益成熟,人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机(SVM)结合局部二值模式&…...
如何创建伪服务器,伪接口
创建伪接口一般是用于模拟真实接口的行为,以便在开发和测试过程中进行使用,以下是一些常见的创建伪接口的方法: 使用 Web 框架搭建: Python 和 Flask:Flask 是一个轻量级的 Python Web 框架。示例代码如下:…...

《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南
第54篇:国产大模型API对比与使用指南 ——从百度文心到通义千问,一文看懂国内AI平台选型 📌 摘要 随着中国人工智能产业的快速发展,越来越多的国产大模型平台开始崭露头角。本文将系统梳理当前主流国产大模型 API(如…...

质量、重力、引力、惯性 的本质,以及虫洞
1、质量 物体,之所以,有质量源自于其微观结构。物体好比一块海绵,浸没在暗物质的海洋里。随暗物质海洋的涌动而不断移动。海绵微观结构越细密,受到暗物质海洋的裹携力就越大(好比汤勺,与漏勺对汤水的阻碍力。又好比纱窗与船帆对风的阻隔力。) 微观结构越细密,在相同表面积…...

基于ssm+mysql的快递管理系统(含LW+PPT+源码+系统演示视频+安装说明)
系统功能 管理员功能:个人中心、用户管理、订单管理、快递员管理;快递员功能:查看订单、更新快递状态;派单员功能:订单分配、订单管理;客户功能:订单查询、个人信息维护。 作者:计算…...
JVM——即时编译器的中间表达形式
中间表达形式(IR):编译器的核心抽象层 1. IR的本质与作用 在编译原理的体系中,中间表达形式(Intermediate Representation, IR)是连接编译器前端与后端的桥梁。前端负责将源代码转换为IR,而后…...

质心均匀体(引力屏蔽技术)
1、线质心体 陀螺我们都玩过,一个惯性圆盘加一个轴,旋转起来可以独脚而立。(垂直于旋转面的不平衡力,在旋转面旋转180度后,被其自身抵消,故而平衡。可抵消不平衡力的大小,取决于惯性飞轮的质量和旋转的速度)。此时,旋转的陀螺等同于一个轴线质心体(轴线上任意一点提供支…...
深度学习:AI为老年痴呆患者点亮希望之光
引言 随着全球人口老龄化进程的加速,老年痴呆症已成为严重威胁老年人健康和生活质量的公共卫生问题。据世界卫生组织统计,全球每 3 秒钟就有 1 人被诊断为痴呆,预计到 2050 年,全球痴呆患者人数将从目前的约 5000 万激增至 1.52 亿…...

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

STM32的SysTick
SysTick介绍 定义:Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的递减计数器,具有自动重载值寄存器的功能。当计数器到达自动重载值时,它会自动重新加载…...

【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
1.约定前后端交互接口 [请求] /book/getListByPage [参数] currentPage1&pageSize10 [响应] 返回封装的result对象对应的Json数据 2. 整体逻辑 2.1 Controller的逻辑 (1)把接收的参数封装为PageRequest类,里面有属性:curren…...
Github 2025-05-10 Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2025-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Python项目1Zed: 由Atom和Tree-sitter的创建者开发的高性能多人代码编辑器 创建周期:1071 天开发语言:Rust协议类型…...
drf 使用jwt
安装jwt pip install pyJwt 添加登录url path("jwt/login",views.JwtLoginView.as_view(),namejwt-login),path("jwt/order",views.JwtOrderView.as_view(),namejwt-order), 创建视图 from django.contrib.auth import authenticateimport jwt from jw…...