【贪心算法】贪心算法七

【贪心算法】贪心算法七

贪心算法七

在这里插入图片描述
点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

1.整数替换

题目链接:397. 整数替换

题目描述:

在这里插入图片描述

算法原理:

解法一:模拟(递归 + 记忆化搜索)

假设n = 18,我们要干的事情是把18变成1最小的步数。因为18是一个偶数只能除2变成9,拿到9这个数字,要干的其实也是一件相同的事情,要把9变成1最小的步数。

此时这里就出现了重复的子问题,大问题是18变成1的最小步数,18/2=9后就从了9变成1的最小步数的相同问题。因此我们可以把重复子问题拿到设计出函数头
int dfs(int n) 给一个整数n返回n变成1的最小步数。函数体 其实就是题目给的,如果n是偶数/2,如果n是奇数要么+1,要么-1我们求得是最小步数所以是 min(dfs(n-1),dfs(n+1)),递归出口 当 n == 1是之间返回0就行了。

在这里插入图片描述


在递归过程中发现大量重复,就可以用记忆化搜索,建一个数组,但是这道题的数据范围是1 <= n <= 2^31 - 1,我们要开这么大的空间肯定不行,因此搞一个hash<int,int> 第一个参数对应数字n,第二个参数对应这个数变成1的最小步数。

在这里插入图片描述
classSolution{  unordered_map<int,int> hash;public:intintegerReplacement(int n){ returndfs(n);}// 递归intdfs(longlong n)// 细节问题 数据范围1 <= n <= 2^31 - 1 加1会越界{ if(n ==1){ return0;}if(n %2==0)// 如果是偶数 { return1+dfs(n /2);}else{ return1+min(dfs(n -1),dfs(n +1));}}// 记忆化搜索intdfs(longlong n){ if(hash.count(n)){ return hash[n];}if(n ==1){  hash[1]=0;return hash[1];}if(n %2==0){  hash[n]=1+dfs(n /2);return hash[n];}else{  hash[n]=1+min(dfs(n -1),dfs(n +1));return hash[n];}}};

解法二:贪心

补充知识:二进制

  1. 偶数:二进制表示中最后一位是 0
  2. 奇数:二进制表示中最后一位是 1
  3. /2 操作:二进制表示中统一右移一位

我们这里研究的都是整数。
前两个可以自己举例看看。我们看最后一个

在这里插入图片描述


接下来想我们的贪心策略:

如果n是偶数没法贪,只能执行/2操作

是奇数就可以贪,要么执行+1,要么执行-1操作。
在模拟解法我们就是试试+1操作和-1操作看谁最小,但是如果在没有试之前就已经知道是+1好还是-1好,直接让奇数沿着较好的选择走,就可以舍去一个选择,那我们的时间复杂度会变得更优。

所以我们的贪心就是判断是+1好还是-1好。

如何判断?分情况讨论:

奇数的二进制最后一位是0,所以我们可以把奇数分为两大类

第一类:前面二进制位是 …,最后两个二进制位是 01

第二类:前面二进制位是 …,最后两个二进制位是 11

其中第一类我们默认 n > 1,也就是说 … 有1,如果没有1的话就是00…01了,直接返回即可。第二类默认 n > 3。

如果是 …01,接下来要么执行+1操作,要么执行-1操作。 +1操作会变成 …10,-1操作会变成 …00,那到底那个操作好呢? +1和-1操作都会变成偶数,偶数只能执行/2操作。假设…01是 …10001,执行+1操作会变成10010在执行/2操作会变成1001,执行-1操作会变成10000在执行/2操作会变成1000。这个时候就可以看出那个操作好了,肯定是-1操作好,因为1000我们可以一直/2操作尽快得到1,1001还需要在+1和-1操作在/2操作。

所以是奇数二进制最后两位是01,就执行-1操作,然后/2操作,会比较快得到1。

在这里插入图片描述

如果是 …11,接下来也是要么执行+1操作,要么执行-1操作,分析过程和上面一样。

在这里插入图片描述

但是n > 3这里有一个意外,当 n = 3的时候,我们需要特殊讨论,n = 3,二进制位前面都是0,后面虽然也是11。但是这里我们执行-1操作得到…10,然后在执行/2操作,直接就变成1了。这个和选择是不一样的。如果执行+1操作就会多一步/2操作。

在这里插入图片描述


我们这个贪心不用证明,分类讨论过程本身就是对这个贪心的证明。

那如何写代码呢?

如何判断二进制最后两位是01还是11呢?
拿n%4就可以了,因为n是奇数%4只能得到1和3,如果是1就是01情况,如果是3就是11情况。

classSolution{  unordered_map<int,int> hash;public:intintegerReplacement(int n){ int ret =0;while(n >1){ if(n %2==0){  n /=2;++ret;}else{ if(n ==3){  ret +=2; n =1;}elseif(n %4==1){  n 

Read more

Flutter 三方库 sync_http 的鸿蒙化适配指南 - 掌控同步网络请求、底层脚本通讯实战、鸿蒙级工具开发专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 sync_http 的鸿蒙化适配指南 - 掌控同步网络请求、底层脚本通讯实战、鸿蒙级工具开发专家 在鸿蒙跨平台应用开发中,虽然绝大多数场景都提倡异步处理,但在某些特定的底层工具开发、初始化脚本或极其简易的命令行工具(CLI)中,我们需要一种简单、直接的同步(Synchronous)HTTP 请求能力。如果你追求的是那种“发请求、等结果、再继续”的线性逻辑。今天我们要深度解析的 sync_http——一个专门为同步阻塞式网络交互设计的 Dart 库,正是帮你实现“确定性通讯”的差异化神器。 前言 sync_http 是 Dart 标准库中被广泛引用的同步 HTTP 实现。它不使用 Future 或

By Ne0inhk

Whisper-base.en:74M参数打造精准英文语音识别工具

Whisper-base.en:74M参数打造精准英文语音识别工具 【免费下载链接】whisper-base.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-base.en OpenAI推出的whisper-base.en模型以仅7400万参数的轻量化设计,在英文语音识别领域展现出卓越性能,为开发者和研究人员提供了兼具效率与准确性的语音转文本解决方案。 行业现状:语音识别技术的轻量化与专业化趋势 随着智能助手、实时字幕和语音交互系统的普及,语音识别技术正朝着两个方向快速发展:一方面是支持多语言、多任务的大型综合模型,另一方面则是针对特定场景优化的轻量化专业模型。根据行业调研数据,英文语音识别市场对低延迟、高精度模型的需求尤为突出,特别是在智能客服、会议记录和教育科技等领域。whisper-base.en正是在这一背景下应运而生,它专注于英文场景,通过参数优化实现了模型体积与识别精度的平衡。 模型亮点:小而精的英文语音识别方案 whisper-base.en作为Whisper系列中的英文专用基础模型,具有

By Ne0inhk

【AIGC工作流】解构AI短剧生产管线:从手动调用DeepSeek+MJ,到Agent一站式自动化的演进

作为一名在代码堆里摸爬滚打多年的老程序员,我对AIGC技术的落地一直保持着敏锐的观察。从最初的GPT-3 API调用,到Stable Diffusion本地部署,再到现在的视频生成模型,技术迭代的速度令人咋舌。 但在实际的AI短剧(AI Video)落地过程中,由于工具链的极度分散,导致生产效率极其低下。本文将从工作流(Workflow)重构的角度,复盘我如何将短剧生产周期从30天压缩至1天的技术路径,并分享一个我近期深度使用的Agent化平台——有戏AI。 一、 痛点:传统AIGC“烟囱式”架构的效率瓶颈 在早期制作我的《重生之玄界》(全网播放量1亿+)系列时,采用的是典型的分步式微服务架构思路,每一个环节都是独立且割裂的: 1. NLP层:调用 DeepSeek / GPT-4 生成分镜脚本(Prompt Engineering 耗时极长)。 2. 图像层:将脚本转化为绘图Prompt,扔进 Midjourney 或 SD。这里最大的技术难点是角色一致性(Character Consistency)

By Ne0inhk
【源力觉醒 创作者计划】开源、易用、强中文:文心一言4.5或是 普通人/非AI程序员 的第一款中文AI?

【源力觉醒 创作者计划】开源、易用、强中文:文心一言4.5或是 普通人/非AI程序员 的第一款中文AI?

前言 * 你有没有发现,AI 正在悄悄渗透进我们的生活:写文案、画插图、做PPT、答作业,它几乎无所不能😍 !但很多人可能会问: AI,我能用吗?用得起吗?适合我吗?特别是中文用户,面对清一色英文界面、动辄上百元的 API 费用、还要“翻墙”的闭源大模型,常常望而却步😩。 * 好消息来了,文心一言4.5 正式开源,带着「能跑、好用、懂中文」的标签亮相😎。这不仅是一款中文大模型,更像是为中文用户量身定做的一把 AI 钥匙,让你在本地就能打开 AI 世界的大门!在这个“不会用 AI 就像不会用手机”的时代,早点上手,早点受益。 * 一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.

By Ne0inhk