我爱学算法之—— 模拟(下) - 教程

news/2025/10/24 13:46:54/文章来源:https://www.cnblogs.com/lxjshuju/p/19163081

一、外观数列

题目解析

在这里插入图片描述

对于这道题,给定一个n,要求我们返回外观数列的第n个元素。

所谓外观数列,countAndSay(n)countAndSay(n-1)行程长度编码。

而行程长度编码,简单来说就是将一个字符串中连续相同字符,修改成出现的次数+字符。

例如:字符串"21"2出现了一次,就变成了12,而1出现了一次,就变成了11。最终字符串就变成了1211

算法思路

了解了题目大概要求,现在来看如何实现:

给定一个n,要求返回第n个外观数列,也就是对字符串"1",进行n-1次行程编码。

所以,我们只需要实现一个字符串行程编码(也就是统计一个字符串中字符出现的次数,然后再跟上字符拼接上一个新的字符串即可);

然后进行n-1次行程编码,就可以获得最终结果。

代码实现

class Solution {
public:
string countAndSay(int n) {
string ret = "1";
for (int i = 1; i < n; i++) // 进行n-1次编码
{
int l = 0, r = 0;
int sz = ret.size();
string tmp;
while (r < sz) {
while (r < sz && ret[r] == ret[l])
r++;
// 字符串拼接
tmp += (to_string(r - l) + ret[l]);
l = r;
}
ret = tmp;
}
return ret;
}
};

二、数青蛙

题目解析

在这里插入图片描述

对于这道题,给定一个字符串croakOfFrogs,其中只包含croak

青蛙要像发送蛙鸣,就必须按照croak的顺序,少一个字母都不能发送蛙鸣。

题目要求我们根据字符串croakFrogs中,所有蛙鸣所需要青蛙的最少数目。

注意:题目中明确说明,croakOfFrogs中不是由若干个有效的croak字符组成,就返回-1(也就是说,在croakOfFrogs中。如果存在字符没有按照croak的顺序,或者缺少某一个字符,就返回-1

算法思路

了解了这道题是什么意思,那如何求解呢?

思路:

对于这道题,遍历croakOfFrogs字符串肯定是必不可少的;

在遍历croakOfFrogs字符串的过程中,我们要判断当前字符串是否是满足条件的(按照croak顺序),还要统计需要青蛙的最少数量。

所以,这里我们就可以使用一个hash表,hash表中统计的是:当前喊到了该字符的数量。

在遍历到i位置时:

在这里插入图片描述

描述完了整个过程,接下来就是将这个过程转换成代码:

首先,创建hash表(这里使用vector<int>模拟hash表)。初始化hash

在遍历字符串之前,这里可以再创建一个unordered_map(也就是hash表)index,其中存储字符和对应的下标。

然后,遍历字符串croakOfFrogs"croak"字符串的长度为n

遍历完字符串croakOfFrogs后,再遍历hash表(除'k'以外所有元素),如果存在值>0的就返回-1

最后,返回hash[n-1]即可。

代码实现

class Solution {
public:
int minNumberOfFrogs(string croakOfFrogs) {
string str = "croak";
int n = str.size();
vector<int> hash(n);unordered_map<char, int> index;for (int i = 0; i < n; i++)index.insert({str[i], i});for (auto& e : croakOfFrogs) {if (e == 'c') {if (hash[n - 1] > 0)hash[n - 1]--;hash[0]++;} else {int i = index[e];if (hash[i - 1] == 0)return -1;hash[i]++;hash[i - 1]--;}}for (int i = 0; i < n - 1; i++) {if (hash[i] > 0)return -1;}return hash[n - 1];}};

本篇文章到这里就结束了,感谢支持
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cout 输出流控制

cout 输出流控制 设置字段宽度:setw(x) ,该函数可以使得补全 \(x\) 位输出,默认用空格补全。 bool Solve() {cout << 12 << endl;cout << setw(12) << 12 << endl;return 0; }设置填…

完整教程:Torch-Rechub学习笔记-task3

完整教程:Torch-Rechub学习笔记-task3pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

日期换算(基姆拉尔森公式)

日期换算(基姆拉尔森公式) 已知年月日,求星期数。 int week(int y,int m,int d){if(m<=2)m+=12,y--;return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1; }

sersync for docker 实时同步

sersync for docker 实时同步使用 sersync 工具 放置到 docker 里 实时同步目录 # 环境数据节点 192.168.15.120 /data/kcdoc/{test.txt,test1.txt,test2.txt} 镜像节点 192.168.15.121 /data/kcdoc/空# 目的:…

最长严格/非严格递增子序列 (LIS)

最长严格/非严格递增子序列 (LIS) 一维 注意子序列是不连续的。使用二分搜索,以 \(\mathcal O(N\log N)\) 复杂度通过,另也有 \(\mathcal O(N^2)\) 的 \(\tt dp\) 解法。\(\sf dis\) \(\rm dis\) vector<int> …

动态开点线段树模板

const int M =1e5+5; struct node{int sum=0;int l=0,r=0; }tr[M*30]; #define ls(x) (tr[x].l) #define rs(x) (tr[x].r) #define sum(x) (tr[x].sum) int tot; void pull(int x){sum(x)=sum(ls(x))+sum(rs(x));} vo…

博弈2

威佐夫博弈有两堆石子,给出每一堆的石子数量,两名玩家轮流行动,每人每次任选以下规定的一种操作石子:任选一堆,取走正整数颗石子; 从两队中同时取走正整数颗石子。拿到最后一颗石子的一方获胜。双方均采用最优策…

【Python爬虫】反爬虫入门与基础(一) - 教程

【Python爬虫】反爬虫入门与基础(一) - 教程2025-10-24 13:37 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

sg

SG 游戏(有向图游戏) 我们使用以下几条规则来定义暴力求解的过程:使用数字来表示输赢情况,\(0\) 代表局面必败,非 \(0\) 代表存在必胜可能,我们称这个数字为这个局面的SG值; 找到最终态,根据题意人为定义最终态…

解决复制 Ubuntu Server 虚拟机后网络不通的问题(IP冲突问题)

参考https://www.cnblogs.com/lukecui/p/18403316环境软件/系统 版本 说明Windows windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器VMware VMware Workstation 16 ProUbuntu ubuntu-24.04.3-live-server-amd…

postgresql查询数据sql无法使用到索引

如图,刚做过数据迁移将postgresql14中的数据及表迁移到了kingbase数据库中,但发现查询数据在一定范围内内匹配到索引,超过之后就是全表扫描  解决方法:VACUUM ANALYZE sc_surface_water_hour   在 PostgreSQL …

博弈1

巴什博奕有 \(N\) 个石子,两名玩家轮流行动,按以下规则取石子: 规定:每人每次可以取走 \(X(1 \le X \le M)\) 个石子,拿到最后一颗石子的一方获胜。 双方均采用最优策略,询问谁会获胜。两名玩家轮流报数。 规定:…

Day3综合案例一:个人简介

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

自动机

AC 自动机 定义 \(|s_i|\) 是模板串的长度,\(|S|\) 是文本串的长度,\(|\Sigma|\) 是字符集的大小(常数,一般为 \(26\)),时间复杂度为 \(\mathcal O(\sum|s_i|+|S|)\) 。 // Trie+Kmp,多模式串匹配 struct ACAut…

边缘计算与AI:移动端设计软件的实时性能突破 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

标注工具--抹除目标

恩,chatgpt帮我写的标注抹除的工具 import cv2 import numpy as np import argparse import os """ 左键拖动 框选区域 左键单击 粘贴选区 z 撤销上一次操作 c 取消当前选区 s 手动保存 n 自动保存当前…

1024程序员节福利!参与互动,5分钟赢好礼!

Hi 程序员朋友们! 敲得了代码,扛得住需求,也该在 1024 这个专属节日里,给自己拆份“技术人专属福利”啦~ 作为深耕开源数据库的 IvorySQL,今年 1024 不想搞复杂玩法——2 种方式,轻松参与,即可获得 IvorySQL 周…

具身智能/智能体 定义

1. 具身智能智能并非一个孤立于身体的大脑计算过程,而是源于身体与环境的实时交互。智能、知觉和行动是一个不可分割的整体。 一个系统必须拥有“身体”(可以是实体机器人,也可以是虚拟环境中的化身),并通过这个身…

【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)

【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

实用指南:flink批处理-水位线

实用指南:flink批处理-水位线2025-10-24 13:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…