【优选算法】Simulation-Phoenix:模拟算法的重生涅槃

【优选算法】Simulation-Phoenix:模拟算法的重生涅槃

文章目录

本篇是优选算法之模拟算法,是一种依据问题给定的规则与逻辑,按步骤细致地重现事件的发展流程,进而获取最终结果的算法

1.概念解析

🚩什么是模拟算法?

简单来说就是照葫芦画瓢,题目说啥就照着写代码就行,所以很考察代码能力

2.替换所有的问号

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述
传送门:替换所有的问号

题解:

在这里插入图片描述

这题很简单,显然是先遍历一遍数组,然后在遍历的时候,如果遇到就替换为与该位置前后都不相同的数,所以也要对要替换的数遍历一遍,直到发现合适的数

💻细节问题:

注意边界情况,没有两个相邻的数

💻代码实现:

#include<iostream>#include<vector>usingnamespace std;classSolution{public: string modifyString(string s){for(int i =0; i < s.size();++i){if(s[i]=='?'){for(char ch ='a'; ch <='z';++ch){if((i ==0|| ch != s[i -1])&&(i == s.size()-1|| ch != s[i +1])){ s[i]= ch;break;}}}}return s;}};

3.提莫攻击

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述
传送门:提莫攻击

题解:

做模拟算法题的精髓就是要画图,只有图画明白了,才能找到规律,而不是凭空想象

在这里插入图片描述

所以根据规律发现相邻两数之差是突破点,如果相邻两数之差大于duration,那么不用重置中毒时间;如果相邻两数之差小于duration,那么重置中毒时间

💻代码实现:

#include<iostream>#include<vector>usingnamespace std;classSolution{public:intfindPoisonedDuration(vector<int>& timeSeries,int duration){int ret =0;for(int i =1; i < timeSeries.size();++i){int x = timeSeries[i]- timeSeries[i -1];if(x >= duration){ ret += duration;}else{ ret += x;}}return ret + duration;}};

4.Z字形变换

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述
传送门:Z字形变换

题解:

本题的意思是要你根据题目给出的Z字形字符串,将其从上到下从左至右的方式以一个新字符串的方式返回,显然这是一个找规律性极强的题目,所以画图!画图!画图!

在这里插入图片描述

💻第一步:

首先我们将每个数的索引按照Z字形填入,我们是从第一行开始录入,所以可以发现第一行最后一行都是一个等差数列,然后发现规律,公差是0~6之间元素的个数,所以得出d=2n-2

在这里插入图片描述

💻第二步:

接下来处理中间的行数,发现如图的1 ~ 7 ~ 135 ~ 11 ~ 17也是以6为公差,只不过是两个数两个数的差,所以得出规律(k,d-k)

💻细节问题:

注意for循环的判断条件为i < n || j < k,而不是&&,因为当一个越界之后,另一个可能还没越界判断完

💻代码实现:

#include<iostream>#include<vector>usingnamespace std;classSolution{public: string convert(string s,int numRows){if(numRows ==1){return s;} string ret;int n = s.size();int d =2* numRows -2;for(int i =0; i < n; i += d){ ret += s[i];}for(int k =1; k < numRows -1;++k){for(int i = k, j = d - k; i < n || j < k; i += d, j += d){if(i < n){ ret += s[i];}if(j < n){ ret += s[j];}}}for(int i = numRows -1; i < n; i += d){ ret += s[i];}return ret;}};

5.外观序列

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述
传送门:外观序列

题解:

其实题目意思就是对上一行的序列进行解释,比如第三行为21,那么第四行的意思就是一个2一个1

在这里插入图片描述

💻细节问题:

所以很明显这题要用双指针解决,因为要持续向后查找有几个相同的,直到不同为止

在这里插入图片描述

leftright都从0开始,然后right向后移动,直到该位置和前一个位置不相同,然后记录长度和数字,直接让left=right,开始下一段

💻代码实现:

#include<iostream>#include<string>usingnamespace std;classSolution{public: string countAndSay(int n){ string ret ="1";for(int i =1; i < n;++i){ string tmp;int len = ret.size();for(int left =0, right =0; right < len;){while(ret[left]== ret[right]){ right++;} tmp +=to_string(right - left)+ ret[left]; left = right;} ret = tmp;}return ret;}};

6.数青蛙

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述
传送门:数青蛙

题解:

要理解本题题意,就是一只青蛙要完整叫完croak,如果一只青蛙没叫完,那么就需要另一只青蛙来发出叫声

在这里插入图片描述

💻第一步:

在这里插入图片描述

首先,以如图所示为例子,第一个c,计入该位置为1,接下来到r该位置变为1上一个位置变为0,可以理解为一个1一直在移动,表示这个叫声遍历到哪里了,直到遍历到k为止

💻第二步:

在这里插入图片描述

注意在遍历过程中注意要像图中分类,对于字符c,若k位置不为0,那么表示有青蛙闲置,那么之前叫完的青蛙就可以再次叫对于其他字符,要找该字符的前一个字符符不符合croak的顺序和字符若不符合字符直接返回-1

💻细节问题:

注意处理完所有字符时,要判断一下是否还有没叫完的叫声

💻代码实现:

#include<iostream>#include<vector>#include<unordered_map>#include<string>usingnamespace std;classSolution{public:intminNumberOfFrogs(string croakOfFrogs){ string t ="croak";int n = t.size(); vector<int>hash(n); unordered_map<char,int> index;for(int i =0; i < n;++i){ index[t[i]]= i;}for(auto ch : croakOfFrogs){if(ch =='c'){if(hash[n -1]!=0){ hash[n -1]--;} hash[0]++;}else{int i = index[ch];if(hash[i -1]==0){return-1;} hash[i -1]--; hash[i]++;}}for(int i =0; i < n -1;++i){if(hash[i]!=0){return-1;}}return hash[n -1];}};

希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

请添加图片描述

Read more

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操作系统 2、镜像准备 三、安装 1、安装Docker 2、启动Ollama 3、拉取Deepseek大模型 4、启动Deepseek  一、引言 1、什么是Docker Docker:就像一个“打包好的App” 想象一下,你写了一个很棒的程序,在自己的电脑上运行得很好。但当你把它发给别人,可能会遇到各种问题: * “这个软件需要 Python 3.8,但我只有 Python 3.6!

By Ne0inhk
深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金术】,我们一起来解锁更加刺激的剧情!友情提醒:《《《前方高能》》》 目录 在哪使用DeepSeek 如何对提需求  隐藏玩法总结 几个高阶提示词 职场打工人 自媒体创作 电商实战 程序员开挂 非适用场地 “服务器繁忙”如何解决 (1)硅基流动平台 (2)Chatbox + API集成方案 (3)各大云平台 搭建个人知识库 前置准备 下载安装AnythingLLM 选择DeepSeek作为AI提供商 创作工作区 导入文档 编辑  编辑 小编寄语 ——————————————————————————————————————————— 在哪使用DeepSeek 我们解锁剧情前,肯定要知道在哪用DeepSeek!咯,为了照顾一些萌新朋友,它的下载方式我放在下面了,拿走不谢!  (1)

By Ne0inhk
【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek + 通义万相制作AI视频流程 4.1 DeepSeek + 通义万相制作视频优势 4.1.1 DeepSeek 优势 4.1.2 通义万相视频生成优势 4.2

By Ne0inhk
【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

系列篇章💥 No.文章01【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能02【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南03【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力04【DeepSeek开发入门】DeepSeek API 开发初体验05【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践)06【DeepSeek开发入门】Function Calling 函数功能应用实战指南07【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手08【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南09【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器10【DeepSeek部署实战】基于Ollama快速部署Dee

By Ne0inhk