当前位置: 首页 > news >正文

算法之力扣数青蛙

题目连接

文章目录

  • 题目解析
  • 算法原理
    • 第一步
    • 第二步
    • 第三步
    • 第三步
    • 第四步指向o
  • 代码讲解
  • 代码实现

题目解析

在这里插入图片描述

先给大家来讲解一下这个题目的意思吧,这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声很明显一只青蛙叫两声就够了。

算法原理

我们以第二个样例为示范样列给大家讲解一下该怎么解决这个问题

第一步

在这里插入图片描述

我们以上面这个图为例,首先弄出一个表格这个表格第一行表示的是croak这五个字符每个字符的个数,然后用一个指针指向开头第一个字符在指针向后移动的过程中去改变表中的数字即可首先先看第一个字符是c因此先将c这个表格弄为1

第二步

在这里插入图片描述

第三步

当下面的指针向后移动到r的时候先查看表格中r前面的那个字符是不是大于0,之后如果大于那就是num[‘r’]++然后num[‘c’]–;
在这里插入图片描述

第三步

之后当指针再次向后移动的时候下一个字符为c我们可以看到c这个字符经过第二步变成了0并且k也是0因此我们让c再++
在这里插入图片描述

第四步指向o

第四步指向了o我们就让o前面的字符–并且让o++
在这里插入图片描述
然后就一直向后执行即可由此我们可以得到一个规律那就是
在这里插入图片描述

代码讲解

根据上面的讲解我们知道首先我们需要一个记录个数的数组,以及一个记录下标的哈希表

  string a="croak";unordered_map<char,int>hash;hash['c']=0;hash['r']=1;hash['o']=2;hash['a']=3;hash['k']=4;int num[300];memset(num,0,sizeof(num));

我们可以看到hash是为了记录每个字符在字符串中的下标,num为了记录每个字符此时个数

代码实现


class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {string a="croak";unordered_map<char,int>hash;hash['c']=0;hash['r']=1;hash['o']=2;hash['a']=3;hash['k']=4;int num[300];memset(num,0,sizeof(num));for(int i=0;i<croakOfFrogs.size();i++){if(croakOfFrogs[i]=='c'){if(num['k']==0){num['c']++;}else if(num['k']>0){num['k']--;num['c']++;}}else{if(num[a[hash[croakOfFrogs[i]]-1]]>0){num[a[hash[croakOfFrogs[i]]-1]]--;num[a[hash[croakOfFrogs[i]]]]++;}else{return -1;}}}for(int i=0;i<4;i++){if(num[a[i]]!=0){return -1;}}return num['k'];}
};
想一直在一起不想分开遇到不好的可以共同克服,我有让人厌烦甚至超过底线的缺点我也会去改正。

相关文章:

  • C语言---指针进阶
  • 世界顶级名校计算机专业,都在用哪些书当教材?
  • Java安全 URLDNS链分析
  • 函数——递归3(c++)
  • ChatGPT-01 用ChatGPT指令,自学任何领域的系统知识
  • 设计模式之:状态模式(State Pattern)
  • R语言【base】——nrow(),ncol(),NCOL(),NROW():返回数组的行数/列数
  • 如何解决缓存和数据库的数据不一致问题
  • Spring Boot 笔记 012 创建接口_添加文章分类
  • VueCLI核心知识3:全局事件总线、消息订阅与发布
  • pytorch神经网络入门代码
  • 最优字符串分隔符:零宽度空格和字符
  • 从宏观到微观——泽攸科技ZEM系列台式扫描电子显微镜在岩石分析中的应用
  • SpringBoot常见问题
  • firewall防火墙配置实战
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Centos6.8 使用rpm安装mysql5.7
  • docker-consul
  • go语言学习初探(一)
  • interface和setter,getter
  • Iterator 和 for...of 循环
  • JS函数式编程 数组部分风格 ES6版
  • node 版本过低
  • spring学习第二天
  • Vue2 SSR 的优化之旅
  • 创建一个Struts2项目maven 方式
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小程序开发之路(一)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 回归生活:清理微信公众号
  • !!java web学习笔记(一到五)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2020)Java后端开发----(面试题和笔试题)
  • (a /b)*c的值
  • (C语言)共用体union的用法举例
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (五)MySQL的备份及恢复
  • (原創) 物件導向與老子思想 (OO)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)平衡树
  • (转载)Linux网络编程入门
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET LINQ 通常分 Syntax Query 和Syntax Method