模拟算法题

模拟算法题我们只需要按照题目的意思一步一步走,将这些步骤转换成代码即可

1.替换所有问号

题目要求将字符串中所有的问号都改为其他字母,但是要求不能与左右两边的字母重复,返回一种结果即可。

解法:

        遍历原字符串,当遍历到问号时,我们遍历26个英文字母,找到既不与前面相同也不与后面相同的字母,修改该位置,继续遍历。在遍历的过程中需要注意首元素以及尾元素,它们只需要判断相邻的一个元素即可,要避免越界访问。

处理办法:

1、得知当前位置的元素是问号后,我们可以接着三目运算符求出左右字符,如果那一侧不存在,则随便给一个字符,但不可以是字母,其不影响结果

2、已知i位置当前字符是问号,在遍历26个英文字母时进行额外判断,如果i == 0,则没有左侧元素,如果i = n-1,则没有右侧元素.if (i == 0 || prev != ch) && (i == n-1 || next != ch )

        时间复杂度:O(26n),遍历数组一遍,期间还遍历了26个英文字母

        空间复杂度:O(1),没有使用额外的空间

// C++

class Solution 
{
public:
    string modifyString(string s) 
    {
        for(int i=0; i<s.size(); ++i)
        {
            if(s[i] == '?')
            {
                char tmp1 = i-1<0?'0':s[i-1];
                char tmp2 = i+1>s.size()-1?'0':s[i+1];
                for(char ch='a'; ch<='z'; ++ch)
                {
                    if(ch != tmp1 && ch != tmp2)
                    {
                        s[i] = ch;
                    }
                }
            }
        }
        return s;
    }
};

# python

class Solution:
    def modifyString(self, s: str) -> str:
        tmp = list(s)
        for i in range(0,len(tmp)):
            if tmp[i] == '?':
                for ch in range(ord('a'),ord('z')+1):
                    j = chr(ch)
                    if (i==0 or tmp[i-1]!=j) and (i==len(tmp)-1 or tmp[i+1]!=j):
                        tmp[i] = j
                        break
        return ''.join(tmp)

2.提莫攻击

题目给我们一个timeSeries数组,里面存放的是提莫普攻的时间。提莫每普攻一次,就会使敌人中毒duration秒,如果在中毒结束之前又普攻了一次,此时就会重置中毒时间。我们需要返回总的中毒时间。

 解法:

        遍历数组,当遍历到一个时间后,我们给其加上中毒时间,如果该时间小于等于下一次普攻的时间,就不会重置中毒,此时只需要在总中毒时间上加上duration即可;如果大于中毒时间,则说明中毒还未结束,就又普攻了,需要重置中毒时间,此时中毒的时长就是两次普攻之间的间隔时间。

        需要注意最后一次普攻,最后一次普攻一定会经历一次完整的中毒。所以加上duration。

        时间复杂度:O(n),遍历数组一次

        空间复杂度:O(1),没有使用额外的空间


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值