【基础算法】模拟

1.替换所有的问号 



替换所有的问号

思路:

模拟实现

从a-z依次尝试替换?是否满足题意,第一个满足的就可break掉。

class Solution {
public:
    string modifyString(string s) {
        int n = s.size();
        for(int i = 0; i < n; i++)
        {
            if(s[i] == '?') //替换
            {
                for(char ch = 'a'; ch <= 'z'; ch++)
                {
                    if((i == 0 || s[i - 1] != ch) && (i == n - 1 || s[i + 1] != ch))
                    {
                        s[i] = ch;
                        break;
                    }
                }
            }
        }
        return s;
    }
};

2.提莫攻击

提莫攻击

思路:

 模拟

计算两个相邻时间的差值

如果差值大于等于duration,则说明中毒要持续duration妙

如果差值小于duration,则说明中毒要持续两者的差值

class Solution {
public:
    int findPoisonedDuration(vector<int>& t, int duration) {
        int ret = 0;
        for(int i = 1; i < t.size(); i++)
        {
            int tmp = t[i] - t[i - 1];
            if(tmp < duration) ret += tmp;
            else ret += duration;
        }
        return ret + duration;
    }
};

3.Z字形变换

Z字形变换 

 

思路:

模拟后找规律

class Solution {
public:
    string convert(string s, int numRows) {
        
        //处理边界情况
        if(numRows == 1) return s;

        int d = 2 * numRows - 2, n = s.size();
        string ret;
        
        //处理第一行
        for(int i = 0; i < n; i += d)  ret += s[i];
        //处理中间行
        for(int k = 1; k < numRows - 1; k++)//枚举每一行
        {
            for(int i = k, j = d - k; i < n || j < n; i += d, j += d)
            {
                if(i < n) ret += s[i];
                if(j < n) ret += s[j];
            }
        }
        //处理最后一行
        for(int i = numRows - 1; i < n; i += d) ret += s[i];

        return ret;
    }
};

 

 4.外观数列

外观数列

思路:

模拟 + 双指针

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

5.数青蛙

数青蛙 

 

思路:

模拟 + 哈希

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string t = "croak";
        int n = t.size();
        vector<int> hash(n);//用数组模拟哈希表

        unordered_map<char, int> index;//记录每个字符的下标
        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];
    }
};

相关推荐

  1. 算法基础算法模板

    2024-05-04 19:06:03       38 阅读
  2. 算法模版基础算法

    2024-05-04 19:06:03       23 阅读
  3. 算法模板】图论基础算法

    2024-05-04 19:06:03       34 阅读
  4. 【数据结构与算法 | 基础篇】环形数组模拟队列

    2024-05-04 19:06:03       37 阅读
  5. 【数据结构与算法 | 基础篇】数组模拟

    2024-05-04 19:06:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 19:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 19:06:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 19:06:03       82 阅读
  4. Python语言-面向对象

    2024-05-04 19:06:03       91 阅读

热门阅读

  1. mysql binlog入门

    2024-05-04 19:06:03       29 阅读
  2. 深入学习Linux内核 - 进程地址空间

    2024-05-04 19:06:03       32 阅读
  3. C语言总结四:函数(压缩版)

    2024-05-04 19:06:03       33 阅读
  4. 简历总结:打造HR无法拒绝的简历

    2024-05-04 19:06:03       35 阅读
  5. 【需求工程概述】

    2024-05-04 19:06:03       32 阅读
  6. springcloud(智慧养老平台)

    2024-05-04 19:06:03       29 阅读
  7. codeforces round 879 div2 (a,b,c)

    2024-05-04 19:06:03       32 阅读