算法题目---模拟

(一).算法介绍

"模拟"算法,只需要 "比着葫芦画瓢"即可

"模拟"算法的特点就是思路比较简单,主要是考察代码能力

在做"模拟"算法题的时候,一定要知道算法流程,然后把流程转化成代码

(二).具体题目

1.替换所有的问号

https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/

解法:模拟

java 复制代码
    public String modifyString(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i]=='?'){
                for (char sh ='a';sh<='z';sh++) {
                    if ((i==0||chars[i-1]!=sh)&&(i==chars.length-1||chars[i+1]!=sh)){
                        chars[i]=sh;
                        break;
                    }
                }
            }
        }
        return String.valueOf(chars);
    }

2.提莫攻击

495. 提莫攻击 - 力扣(LeetCode)

解法:模拟

java 复制代码
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int ret=0;
        for (int i = 0; i < timeSeries.length-1; i++) {
            int sum=timeSeries[i+1]-timeSeries[i];
            if (sum>=duration){
                ret+=duration;
            }else{
                ret+=sum;
            }
        }
        return ret+duration;
    }

3.Z字型变换

6. Z 字形变换 - 力扣(LeetCode)

解法:模拟

java 复制代码
    public String convert(String s, int numRows) {
        //处理特殊情况,如果numRows=1,那么d=0,所以在处理第一行的时候就会陷入死循环
        if (numRows==1){
            return s;
        }
        StringBuilder stringBuilder=new StringBuilder();
        int d=2*numRows-2; //计算公差
        //处理第一行
        for (int i = 0; i < s.length(); i+=d) {
            stringBuilder.append(s.charAt(i));
        }

        //处理中间行
        for (int i = 1; i < numRows-1; i++) {
            for (int j = i,k=d-i; j <s.length()||k<s.length() ; j+=d,k+=d) {
                if (j<s.length()){
                    stringBuilder.append(s.charAt(j));
                }
                if (k<s.length()){
                    stringBuilder.append(s.charAt(k));
                }
            }
        }
        //处理最后一行
        for (int i = numRows-1; i < s.length(); i+=d) {
            stringBuilder.append(s.charAt(i));
        }

        return stringBuilder.toString();
    }

4.外观数列

38. 外观数列 - 力扣(LeetCode)

解法:模拟

java 复制代码
    public String countAndSay(int n) {
        String ret="1";
        for (int i = 1; i <n ; i++) {
            StringBuilder stringBuilder=new StringBuilder();
            int left=0;
            int right=0;
            while (right<ret.length()){
                while (right<ret.length()&&ret.charAt(left)==ret.charAt(right)){
                    right++;
                }
                stringBuilder.append(String.valueOf(right-left));
                stringBuilder.append(ret.charAt(left));
                left=right;
            }

            ret=stringBuilder.toString();
        }
        return ret;
    }

5.数青蛙

1419. 数青蛙 - 力扣(LeetCode)

解法:模拟

java 复制代码
    public int minNumberOfFrogs(String croakOfFrogs) {
        char[] chars = croakOfFrogs.toCharArray();
        String str="croak";
        int len=str.length();
        // 核心数组:hash[0]~hash[4] 分别记录 叫c、r、o、a、k 的青蛙数量
        int[] hash=new int[len];
        // 哈希表:建立 字符 → 对应下标 的映射(c=0, r=1, o=2, a=3, k=4)
        HashMap<Character,Integer> hashMap=new HashMap<>(); //[str中的字符,字符的下标]
        for (int i = 0; i < len; i++) {
            hashMap.put(str.charAt(i),i);
        }
        for (char ch:chars) {
            if (ch=='c'){ //判断是否为'c'的情况
                if (hash[len-1]!=0){
                    hash[len-1]--;
                }
                hash[0]++;
            }else{
                int index=hashMap.get(ch);
                if (hash[index-1]==0){
                    return -1;
                }
                hash[index-1]--;
                hash[index]++;
            }
        }
        // 遍历结束后检查:c/r/o/a 阶段必须没有青蛙(所有青蛙都叫完了k)
        for (int i = 0; i < len-1; i++) {
            if (hash[i]!=0){
                return -1;
            }
        }
        return hash[len-1];
    }
相关推荐
happyprince13 小时前
篇1:整体观 · bitsandbytes项目全貌解读
人工智能·算法
青梅橘子皮13 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
玖石书13 小时前
ASP.NET Core 迁移至 Spring系列:类库框架篇
java·后端·asp.net
让学习成为一种生活方式13 小时前
DNA 甲基化综述(模式、调控与功能)--Current Opinion in Plant Biology
算法
满栀58514 小时前
原生JS + ECharts 多图表可视化实战:从业务实现到工程化优化
开发语言·javascript·echarts
摇滚侠14 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
-森屿安年-14 小时前
647. 回文子串
c++·算法·动态规划
骇客野人14 小时前
IDEA 安装 Trae(TRAE AI: Coding Assistant)完整步骤
java·ide·intellij-idea
弹简特14 小时前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
皓月斯语14 小时前
P5736 【深基7.例2】质数筛
c++·算法·题解