博客
关于我
[LeetCode 周赛185] 3. 数青蛙(递推、分析、巧妙解法)
阅读量:565 次
发布时间:2019-03-09

本文共 1797 字,大约阅读时间需要 5 分钟。

文章目录

1. 题目来源

  • 题目来源于一个经典的青蛙跳跃编程问题,题目要求计算在给定字符串中,青蛙能完成跳跃的最少线程数。

2. 题目说明

  • 包含两个图片链接(图片内容为本文的核心编程问题描述),详细展示青蛙跳跃的状态转换及其编程逻辑。

3. 题目解析

  • 详细分析使用递推+分析+巧妙解法解决该问题。

3.1 方法一:递推+分析+巧妙解法

  • 思路:

    一个线程输出一个“croak”,可以连续输出,但只能算作一个线程。
    共同的目标:在字符串中实时跟踪青蛙的状态变化,计算最多有多少个线程同时被占用。

  • 数组结构:

    使用二维数组dp[MAXN][5],用于记录处于字符串位置i,处于 状态c r o a k的线程数量。

  • 状态转换规则:

    • 当前字符为'c',表示新线程启动,状态置为0,并自增当前状态。
    • 其他字符不为'c',则状态转移自增当前状态并自减前一个状态。
  • 更新策略:

    • 遍历字符串,每一步更新当前状态和前一个状态的数值。
    • 若出现负值,反馈错误。

3.2 解决方案

  • 使用1维数组实现状态转换,减少内存占用并提升效率。
  • 最终求和所有状态的总线程数,确定最大线程数。

4. 相关代码

// 以下是完整代码实现const int MAXN = 1e5 + 50;int dp[MAXN][5];int c2i(char x) {    if (x == 'c') return 0;    if (x == 'r') return 1;    if (x == 'o') return 2;    if (x == 'a') return 3;    if (x == 'k') return 4;    return -1;}class Solution {    public:        int minNumberOfFrogs(string str) {            if (str.empty()) return 0;            int n = str.size();            int ans = 0;            if (n == 0) return 0;            for (int i = 1; i <= n; ++i) {                char c = str[i - 1];                int cur = c2i(c);                if (cur == -1) return -1;                if (cur == 0) {                    dp[i][0]++;                } else {                    dp[i][cur]++;                    dp[i][cur - 1]--;                }                for (int k = 0; k < 4; ++k) {                    dp[i][k] += dp[i - 1][k];                }                for (int k = 0; k < 5; ++k) {                    if (dp[i][k] < 0) return -1;                }                int sum = 0;                for (int k = 0; k < 5; ++k) {                    sum += dp[i][k];                    if (sum > ans) ans = sum;                }            }            for (int k = 0; k < 4; ++k) {                if (dp[n][k] != 0) {                    return -1;                }            }            return ans;        }};

转载地址:http://lghpz.baihongyu.com/

你可能感兴趣的文章
python基于flask搭建http服务(二)—— 实现Excel上传、数据清洗、入库
查看>>
python基于flask搭建http服务(三)—— 使用gunicorn部署项目
查看>>
python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
查看>>
Python块键盘/鼠标输入
查看>>
python在心理学研究中的应用有哪些_心理学在线研究可用平台简介和应用进展
查看>>
python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
查看>>
python在gpu上运行_【python】python开启GPU加速
查看>>
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>