优选算法——模拟


👇作者其它专栏

《数据结构与算法》《算法》《C++起始之路》


相关题解

1.1替换所有的问号

算法思路:

模拟。从前往后遍历整个字符串,找到问号后,用a~z的每一个字符取尝试替换即可。

class Solution { public: string modifyString(string s) { int n=s.size(); for(int i=0;i<n;i++){ if(s[i]=='?'){ for(char ch='a';ch<='z';ch++){ if((i==0||ch!=s[i-1])&&(i==n-1||ch!=s[i+1])){ s[i]=ch; break; } } } } return s; } };

2.2提莫攻击

算法思路:

模拟+分情况讨论。

计算相邻两个时间点的差值:

        i.若差值大于等于中毒时间,说明上次中毒可以持续duration秒;

        ii.若差值小于中毒时间,说明此时发生了中毒叠加,那么上次的中毒只能持续两者的差值。

class Solution { public: int findPoisonedDuration(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+=x; else ret+=duration; } //别忘记,最后一次的中毒也需要加上一个duration return ret+duration; } };

2.3Z 字形变换

算法思路(模拟+找思路):

找规律,用row代替行数,row=4时画出的N字形如下:

可以发现,数据是以2row-2为一个周期进行规律变换的。将所有数替换成用周期来表示的变量:

第一行的数是:0,2row-2,4row-4;

第一行的数是:1,(2row-2)-1,(2row-2)+1,(4row-4)-1,(4row-4)+1;

第一行的数是:2,(2row-2)-2,(2row-2)+2,(4row-4)-2,(4row-4)+2;

第一行的数是:3,(2row-2)+3,(4row-4)+3。

第一行、第四行差为2row-2的等差数列;第二行、第三行除了第一个数取值为行数,每组下标为(2n-1,2n)的数围绕(2row-2)的倍数左右取值。

即首末行规律相同,中间行规律相同。

class Solution { public: string convert(string s, int numRows) { //处理边界情况 if(numRows==1) return s; string ret; int d=2*numRows-2,n=s.size(); //1.处理第一行 for(int i=0;i<n;i+=d) ret+=s[i]; //2.处理中间行 for(int i=1;i<numRows-1;i++){//中间的每一行 for(int j=i,k=d-i;j<n||k<n;j+=d,k+=d){ if(j<n) ret+=s[j]; if(k<n) ret+=s[k]; } } //3.处理最后一行 for(int i=numRows-1;i<n;i+=d){ ret+=s[i]; } return ret; } };

2.4外观数列

算法思路:

【外观数列】,就是依次统计字符串中连续且相同的字符的个数。

class Solution { public: string countAndSay(int n) { string s("1"); n--;//循环n-1次 while(n--){ string tmp; int left=0,right=0,len=s.size(); while(right<len){ while(s[left]==s[right]&&right<len) right++; tmp+=to_string(right-left)+s[left]; left=right; } s=tmp; } return s; } };

2.5数青蛙

算法思路:

模拟青蛙叫声,两种情况:

●只有连续的发出叫声才算成功。当遇到'r''o''a''k'这四个字符时,我们要去查看每个字符对应的前驱字符,有没有青蛙交出来。若有青蛙叫出来,那就让这个青蛙接下来喊出这个字符;若没有,返回-1;

●因为要返回青蛙的最小个数,即同一青蛙可能叫多次。当遇到'c'字符时,我们需要查看'k'字符有没有青蛙叫出来,若有就让此青蛙继续去叫'c';若没有,就重新添加青蛙。

class Solution { public: int minNumberOfFrogs(string croakOfFrogs) { string s="croak"; int n=s.size(); vector<int> hash(n);//数组模拟哈希表 unordered_map<char,int> index;//[x,x]表示这个字符的下标 for(int i=0;i<n;i++) index[s[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

计算机毕业设计:Python电商数据可视化分析与销量预测系统 Flask Selenium 机器学习 商品数据采集分析可视化系统 hadoop Agent 算法优化(建议收藏)✅

计算机毕业设计:Python电商数据可视化分析与销量预测系统 Flask Selenium 机器学习 商品数据采集分析可视化系统 hadoop Agent 算法优化(建议收藏)✅

1、项目介绍 技术栈 Python语言、Flask框架、Selenium爬虫、多元线性回归机器学习模型、LayUI框架、Bootstrap、Echarts图表库、MySQL数据库、Pandas数据处理库 功能模块 · 商品数据可视化大屏 · 商品数据后台管理 · 定时爬虫数据采集 · 机器学习销量预测 · 用户注册登录 · 用户管理(管理员) · 后台管理导航 项目介绍 本系统是一套为应对电商领域数据更新缓慢及销量预测难题而研发的一体化数据分析与可视化平台。后端采用Flask框架,通过Selenium技术实现对淘宝商品数据的自动化定时采集,并利用Pandas工具对原始数据进行清洗与规范化处理后存入MySQL数据库。前端融合LayUI与Bootstrap框架,借助Echarts图表库构建可视化大屏,直观展示商品销量与价格分布等核心指标的变化趋势。系统内置基于多元线性回归的机器学习模型,利用历史销量及特征数据进行训练,能够对未来销量进行科学预测。该平台集可视化展示、数据管理、爬虫调度、销量预测与用户权限控制于一体,可为电商企业提供实时的数据洞察与智能决策支持。 2、项目界面

By Ne0inhk
猫头虎AI开源项目推荐:国产开源AI工具爱派(AiPy)|支持本地部署、Python Use自动化操作本地文件的AI办公神器

猫头虎AI开源项目推荐:国产开源AI工具爱派(AiPy)|支持本地部署、Python Use自动化操作本地文件的AI办公神器

猫头虎推荐:国产开源AI工具 爱派(AiPy)|支持本地部署、自动化操作本地文件的AI办公神器 随着AI大模型的迅猛发展,诸如Manus、OpenManus等产品的出现,一款安装即免费使用的AI办公助手成为当下的刚需,各行业正经历着前所未有的数字化转型。尤其对于数据工程师、数据分析师以及日常办公用户而言,如何更高效、更便捷地利用AI工具处理繁琐重复的任务,已成为迫切需要解决的问题。 本文将全面介绍一款领先的国产开源AI工具——爱派(AiPy),它不仅能帮助用户实现数据自动化处理,还能一键赋能AI控制本地文件处理,极大提升工作效率。 背景 作为数据工程师或分析师,你是否经常面对以下困扰? * 频繁处理各种格式的数据文件,包括 CSV、Excel、JSON、HTML、SQLite、Parquet 等; * 数据清洗、转换、聚合、排序、过滤、分析及可视化等工作反复重复,费时费力。 传统的数据处理流程通常十分繁琐: 1. 打开Python环境,输入如import pandas as pd等大量基础代码; 2. 在处理过程中产生许多临时文件;

By Ne0inhk
Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南

Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南

引言 在国产数据库蓬勃发展的今天,KingbaseES作为国产数据库的佼佼者,凭借其高兼容性、高性能和高安全性,在金融、政府、能源等关键领域得到了广泛应用。本文将介绍如何通过Python的ksycopg2驱动连接并操作Kingbase数据库,从基础连接到高级操作全面掌握这一技术栈。 KingbaseES 数据库【系列篇章】: No.文章地址(点击进入)1电科金仓KingbaseES数据库解析:国产数据库的崛起与技术创新2KingBase数据库迁移利器:KDTS工具深度解析与实战指南3KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战4电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析5KingbaseES客户端工具Ksql使用全指南:从安装到高级操作6Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战7深度解析:基于 ODBC连接 KingbaseES 数据库的完整操作与实践 一、ksycopg2驱动:连接Kingbase的桥梁 1.1 驱动架构深度剖析 ksyc

By Ne0inhk

VS Code 中的 Python 代码格式化插件

在 VS Code 中,有几款非常出色的 Python 代码格式化插件可以帮助你保持代码的整洁与规范。下面这个表格整理了目前主流的几款工具,你可以根据它们的特点进行选择。 工具名称核心特点风格理念推荐适用场景Black开箱即用,几乎无需配置;强制统一的代码风格,可预测性强。“无妥协”的格式化器。它决定格式,讨论空间小,保证所有代码风格一致。团队协作项目;希望零配置快速上手的开发者;追求极简和一致性。autopep8基于 PEP 8 规范,主要修复代码风格问题(如缩进、空格)。相对保守,专注于修复而非重新排版。希望代码严格遵循 PEP 8;对现有代码进行温和的格式化修复。yapf高度可定制,可以模仿多种代码风格;格式化策略更“激进”,会重新排版代码。“自成风格”。目标是通过调整代码来达到最佳可读性,而非严格遵循某一规范。需要高度自定义格式化规则;项目有特殊的代码风格要求。 🔧 如何安装与配置 选好工具后,只需简单几步就能在 VS Code 中启用它们。

By Ne0inhk