博客
关于我
[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/

你可能感兴趣的文章
orm总结
查看>>
os.environ 没有设置环境变量
查看>>
os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
查看>>
os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
查看>>
os.system 在 Python 中不起作用
查看>>
OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
查看>>
OSCACHE介绍
查看>>
SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
查看>>
OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
查看>>
SQL--mysql索引
查看>>
OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
查看>>
OSChina 周日乱弹 —— 2014 年各种奇葩评论集合
查看>>
OSChina 技术周刊第十期,每周技术抢先看!
查看>>
OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
查看>>
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
查看>>
osgearth介绍
查看>>
OSGi与Maven、Eclipse PlugIn的区别
查看>>
Osgi环境配置
查看>>
OSG——选取和拖拽
查看>>
OSG中找到特定节点的方法(转)
查看>>