【优选算法】(第二十一篇)

news2024/11/25 22:43:01

目录

外观数列(medium)

题目解析

讲解算法原理

编写代码

数⻘蛙(medium)

题目解析

讲解算法原理

编写代码


外观数列(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给定⼀个正整数n,输出外观数列的第n项。
「外观数列」是⼀个整数序列,从数字1开始,序列中的每⼀项都是对前⼀项的描述。你可以将其视作是由递归公式定义的数字字符串序列:
countAndSay(1)="1"
countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另⼀个数字字符串。
前五项如下:1. 1
2. 11
3. 21
4. 1211
5. 111221
第⼀项是数字1描述前⼀项,这个数是1即“⼀个1”,记作"11"描述前⼀项,这个数是11即“⼆个1”,记作"21"描述前⼀项,这个数是21即“⼀个2+⼀个1”,记作"1211"描述前⼀项,这个数是1211即“⼀个1+⼀个2+⼆个1”,记作"111221"要描述⼀个数字字符串,⾸先要将字符串分割为最⼩数量的组,每个组都由连续的最多相同字符
组成。然后对于每个组,先描述字符的数量,然后描述字符,形成⼀个描述组。要将描述转换为数字字符串,先将每组中的字符数量⽤数字替换,再将所有描述组连接起来。
例如,数字字符串"3322251"的描述如下图:

⽰例1:输⼊:n=1输出:"1"解释:这是⼀个基本样例。
⽰例2:输⼊:n=4输出:"1211"解释:
countAndSay(1)="1"
countAndSay(2)=读"1"=⼀个1="11"
countAndSay(3)=读"11"=⼆个1="21"
countAndSay(4)=读"21"=⼀个2+⼀个1="12"+"11"="1211"
提⽰:
1<=n<=30

讲解算法原理

解法(模拟):
算法思路:
所谓「外观数列」,其实只是依次统计字符串中连续且相同的字符的个数。依照题意,依次模拟即可。

编写代码

c++算法实现:

class Solution
{
public:
 string countAndSay(int n) 
 {
 string ret = "1";
 for(int i = 1; i < n; i++) // 解释 n - 1 次 ret 即可
 {
 string tmp;
 int len = ret.size();
 for(int left = 0, right = 0; right < len; )
 {
 while(right < len && ret[left] == ret[right]) right++;
 tmp += to_string(right - left) + ret[left];
 left = right;
 }
 ret = tmp;
 }
 return ret;
 }
};

java算法实现:

class Solution
{
 public String countAndSay(int n) 
 {
 String ret = "1";
 for(int i = 1; i < n; i++) // 解释 n - 1 次 ret 即可
 {
 StringBuilder tmp = new StringBuilder();
 int len = ret.length();
 for(int left = 0, right = 0; right < len; )
 {
 while(right < len && ret.charAt(left) == ret.charAt(right)) 
right++;
 tmp.append(Integer.toString(right - left));
 tmp.append(ret.charAt(left));
 left = right;
 }
 ret = tmp.toString();
 }
 return ret;
 }
}

 

数⻘蛙(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给你⼀个字符串croakOfFrogs,它表⽰不同⻘蛙发出的蛙鸣声(字符串"croak")的组合。由于同⼀时间可以有多只⻘蛙呱呱作响,所以croakOfFrogs中会混合多个“croak”。
请你返回模拟字符串中所有蛙鸣所需不同⻘蛙的最少数⽬。要想发出蛙鸣"croak",⻘蛙必须依序输出‘c’,’r’,’o’,’a’,’k’这5个字⺟。如果没
有输出全部五个字⺟,那么它就不会发出声⾳。如果字符串croakOfFrogs不是由若⼲有效的"croak"字符混合⽽成,请返回-1。
⽰例1:
输⼊:croakOfFrogs="croakcroak"输出:1
解释:⼀只⻘蛙“呱呱”两次⽰例2:
输⼊:croakOfFrogs="crcoakroak"输出:2
解释:最少需要两只⻘蛙,“呱呱”声⽤⿊体标注
第⼀只⻘蛙"crcoakroak"第⼆只⻘蛙"crcoakroak"
⽰例3:
输⼊:croakOfFrogs="croakcrook"输出:-1
解释:给出的字符串不是"croak"的有效组合。
提⽰:
1<=croakOfFrogs.length<=105
字符串中的字符只有'c','r','o','a'或者'k'

讲解算法原理

解法(模拟+分情况讨论)
算法思路:
模拟⻘蛙的叫声。
◦ 当遇到 'r' 'o' 'a' 'k' 这四个字符的时候,我们要去看看每⼀个字符对应的前驱字符,
有没有⻘蛙叫出来。如果有⻘蛙叫出来,那就让这个⻘蛙接下来喊出来这个字符;如果没有,直接返回 -1 ;
◦ 当遇到 'c' 这个字符的时候,我们去看看 'k' 这个字符有没有⻘蛙叫出来。如果有,就让
这个⻘蛙继续去喊 'c' 这个字符;如果没有的话,就重新搞⼀个⻘蛙。

编写代码

c++算法实现:

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

java算法实现:

class Solution
{
 public int minNumberOfFrogs(String c) 
 {
 char[] croakOfFrogs = c.toCharArray();
 String t = "croak";
 int n = t.length();
 int[] hash = new int[n]; // 数组模拟哈希表
 Map<Character, Integer> index = new HashMap<>(); // [x, x这个字符对应的下标]
 for(int i = 0; i < n; i++)
 index.put(t.charAt(i), i);
 for(char ch : croakOfFrogs)
 {
 if(ch == t.charAt(0))
 {
 if(hash[n - 1] != 0) hash[n - 1]--;
 hash[0]++;
 }
 else
 {
 int i = index.get(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];
 }
}

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

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

相关文章

openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度

文章目录 openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样&#xff0c;需要调整贴片任务中的元件旋转角度笔记查看自己图纸中的封装的0角度方法贴片任务的角度值范围编带规定的0角度根据编带规定的元件0角度来调整贴片的元件旋转角度如果是托盘飞达备注备注END ope…

电脑失声,一招搞定

早已习惯了Edge浏览器的“大声朗读”功能&#xff0c;今天值班&#xff0c;值班室用的两台电脑只配有耳机&#xff0c;没有音箱&#xff0c;顿时感觉不适。 先找了一个带功放的老音箱&#xff0c;发现少了电箱到功放的音频线。 一顿搜索&#xff0c;在找到音频线的同时&#…

2024年计算机视觉与艺术研讨会(CVA 2024)

目录 基本信息 大会简介 征稿主题 会议议程 参会方式 基本信息 大会官网&#xff1a;www.icadi.net&#xff08;点击了解参会投稿等信息&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 大会简介 2024年计算机视觉与艺术国际学术…

基于SpringBoot+Vue+MySQL的装修公司管理系统

系统展示 管理员后台界面 员工后台界面 系统背景 随着信息技术的快速发展&#xff0c;装修行业正面临数字化转型的关键时刻。传统的装修管理方式存在信息管理混乱、出错率高、信息安全性差等问题&#xff0c;已无法满足现代市场的需求。因此&#xff0c;开发一套高效、便捷的装…

仿《11773手游》源码/手机游戏软件下载门户网站模板/帝国CMS 7.5

帝国CMS 7.5仿《11773手游》源码&#xff0c;手机游戏软件下载门户网站模板。简洁漂亮的手游下载网站模板&#xff0c;采用帝国CMS7.5核心&#xff0c;同步刷新M端。 该模板带同步生成插件&#xff0c;整站干净大气界面漂亮&#xff0c;简单不失简约&#xff0c;模板中的典范&…

css 简单网页布局(一)

1. 三种布局方式 1.1 标准流 1.2 浮动的使用 1.3 简述浮动 1.3.1 浮动三大特性 <style>.out {border: 1px red solid;width: 1000px;height: 500px;}.one {background-color: aquamarine;width: 200px;height: 100px;}.two {background-color: blueviolet;width: 200px;h…

Chromium 中JavaScript Fetch API接口c++代码实现(二)

Chromium 中JavaScript Fetch API接口c代码实现&#xff08;一&#xff09;-CSDN博客 接着上一篇继续介绍调用&#xff0c;上函数堆栈。 1、打开http://192.168.8.1/chfs/shared/test/test02.html 此标签进程ID12484&#xff0c; 2、打开vs附加上此进程ID12484 3、点击页面测…

华为 HCIP-Datacom H12-821 题库 (31)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1. 默认情况下&#xff0c;IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…

YOLOv8 基于NCNN的安卓部署

YOLOv8 NCNN安卓部署 前两节我们依次介绍了基于YOLOv8的剪枝和蒸馏 本节将上一节得到的蒸馏模型导出NCNN&#xff0c;并部署到安卓。 NCNN 导出 YOLOv8项目中提供了NCNN导出的接口&#xff0c;但是这个模型放到ncnn-android-yolov8项目中你会发现更换模型后app会闪退。原因…

【STM32 Blue Pill编程实例】-OLED显示HC-SR04超声波测距结果

OLED显示HC-SR04超声波测距结果 文章目录 OLED显示HC-SR04超声波测距结果1、HC-SR04超声波传感器介绍2、硬件准备及接线模块配置3.1 定时器配置3.2 OLED I2C接口配置3.3 HC-SR04引脚配置4、代码实现在本文中,我们将 HC-SR04 超声波传感器与 STM32 Blue Pill 开发板结合使用,并…

Python-函数与数据容器超详解

1.函数的定义 函数是&#xff1a;组织好的、可重复使用的、用来实现特定功能的代码段。它的优点&#xff1a;将功能封装在函数内&#xff0c;可供随时随地重复利用&#xff0c;提高代码的复用性&#xff0c;减少重复代码&#xff0c;提高开发效率 Python函数的定义方式&#…

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前&#xff0c;Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站&#xff0c;分享Helix Core版本控制系统及其协作套件的强大功能与最新动态&#xff0c;助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场&#xff0c;带来《Perforce Helix C…

论文理解【LLM-CV】—— 【MAE】Masked Autoencoders Are Scalable Vision Learners

文章链接&#xff1a;Masked Autoencoders Are Scalable Vision Learners代码&#xff1a;GitHub - facebookresearch/mae发表&#xff1a;CVPR 2022领域&#xff1a;LLM CV一句话总结&#xff1a;本文提出的 MAE 是一种将 Transformer 模型用作 CV backbone 的方法&#xff0c…

新闻推荐系统:Spring Boot的可扩展性

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

csp-j模拟五补题报告

前言 今天第二题文件名把 r 写成 t 了 又跌出前10名了 白丢了好多分 &#xff08;“关于二进制中一的个数的研究与规律”这篇文章正在写&#xff09; 第一题 牛奶(milk) 我的代码&#xff08;AC&#xff09; #include<bits/stdc.h> #define ll long long #define fi …

Acwing 线性DP

状态转移方程呈现出一种线性的递推形式的DP&#xff0c;我们将其称为线性DP。 Acwing 898.数字三角形 实现思路&#xff1a; 对这个三角形的数字进行编号&#xff0c;状态表示依然可以用二维表示&#xff0c;即f(i,j),i表示横坐标&#xff08;横线&#xff09;&#xff0c;j表…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…

Windows应急响应-Auto病毒

文章目录 应急背景分析样本开启监控感染病毒查看监控分析病毒行为1.autorun.inf分析2.异常连接3.进程排查4.启动项排查 查杀1.先删掉autorun.inf文件2.使用xuetr杀掉进程3.启动项删除重启排查入侵排查正常流程 应急背景 运维人员准备通过windows共享文档方式为公司员工下发软件…

【Java】Java面试题笔试

[赠送]面试视频指导简历面试题 Java面试笔试题题库华为 java笔试面试题2014.files 就业相关java 面试题 面试题库 视频笔记 java笔试题大集合及答案 java面试书籍源码 java算法大全源码包8张图解 java.docx25个经典的Spring面试问答.docx 25个经典的Spring面试问答.docx 100家大…

知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取

在构建知识图谱的过程中&#xff0c;如何准确地识别和提取实体是关键。spaCy 提供了强大的命名实体识别&#xff08;NER&#xff09;功能&#xff0c;我们可以结合自定义规则和工具来实现更精准的实体抽取。本文将详细探讨如何在 spaCy 中实现自定义实体抽取&#xff0c;包括使…