【算法】模拟

简介: 替换所有问号,提莫攻击,z字形变换,外观数列,数青蛙

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:替换所有的问号

二:提莫攻击

三:z字形变换

四:外观数列

五:数青蛙

方法一

方法二


一:替换所有的问号

1576. 替换所有的问号 - 力扣(LeetCode)

image.gif 编辑

方法一

class Solution {
    public String modifyString(String ss) {
        char[] s = ss.toCharArray();
        int len = s.length;
        for(int i = 0 ; i < s.length ; i++){
            if(s[i] == '?'){
                for(char ch = 'a' ; ch <= 'z' ; ch++){
                    if( (i == 0 || ch != s[i-1]) && (i == len-1 || ch != s[i+1]) ){
                        s[i] = ch;
                        break;
                    }
                }
            }
        }
        String ret = String.valueOf(s);
        return ret;
    }
}

image.gif

方法二(复杂)

class Solution {
    public String modifyString(String s) {
        char[] tem = new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        char[] str = s.toCharArray();
        for(int i = 0 ; i < str.length ; i++){
            while(str[i] == '?'){
                for(int j = 0 ; j < tem.length ; j++){
                    if(i == 0){
                        if((str.length > 1) && (str[i+1] != tem[j])){
                            str[i] = tem[j];
                            break;
                        }else if(str.length == 1){
                            str[i] = tem[j];
                            break;
                        }else{
                        }
                    }else if(i == str.length-1){
                        if(str[i-1] != tem[j]){
                            str[i] = tem[j];
                        }else{
                        }
                    }else{
                        if((str[i+1] != tem[j]) && (str[i-1] != tem[j])){
                            str[i] = tem[j];
                            break;
                        }else{
                        }
                    }
                }
            }
        }
        String ret = "";
        for(int i = 0 ; i < str.length ; i++){
            ret += str[i];
        }
        return ret;
    }
}

image.gif

二:提莫攻击

495. 提莫攻击

image.gif 编辑

image.gif 编辑

class Solution {
    public int findPoisonedDuration(int[] nums, int time) {
        int sum = 0;
        for(int i = 0 ; i < nums.length-1 ; i++){
            if(nums[i+1] - nums[i] >= time){
                sum += time; 
            }else{
                sum += nums[i+1]-nums[i];
            }
        }
        sum += time;
        return sum;
    }
}

image.gif

三:z字形变换

6. Z 字形变换

image.gif 编辑

image.gif 编辑

image.gif 编辑

class Solution {
    public String convert(String s, int numRows) {
        //处理一下特殊情况
        if(numRows == 1){
            return s;
        }
        //1:创建一个变量来接收拼接的字符串
        int d = 2 * numRows - 2;
        StringBuilder ret = new StringBuilder();
        int len = s.length();
        //2:确定第一行的下标,并按照下标找到该字符,拼接上去
        for(int i = 0 ; i < len ; i += d){
            ret.append(s.charAt(i));
        }
        //3:确定中间的行数,两层循环,一行一行处理,需要两个指针用于确定坐标,然后拼接
        for(int i = 1 ; i < numRows-1 ; i++){
            for(int k = i , j = d - k ; k < len || j < len ; k += d , j += d){
                if(k < len){
                    ret.append(s.charAt(k));
                }
                if(j < len){
                    ret.append(s.charAt(j));
                }
            }
        }
        //4:确定好最后一行,同第一行处理方式一样
        for(int i = numRows-1 ; i < len ; i += d){
            ret.append(s.charAt(i));
        }
        return ret.toString();
    }
}

image.gif

四:外观数列

38. 外观数列

image.gif 编辑

image.gif 编辑

class Solution {
    public String countAndSay(int n) {
        String ret = "1";
        
        //1:下面的循环用于依次解释ret,只用解释n-1次
        for(int i = 1 ; i <= n-1 ; i++){
            //每一次都是一个新的StringBuilder
            StringBuilder temp = new StringBuilder();
            //模拟:第一次解释,对应的是n=2
            int len = ret.length();
            for(int left = 0 , right = 0 ; right < len ; ){
                //2:模拟有几个相同的数
                while(right < len && ret.charAt(left) == ret.charAt(right)){
                    right++;
                }
                temp.append(Integer.toString(right-left));
                temp.append(ret.charAt(left));
                left = right;
            }
            //更新ret,StringBuilder转换为String类型
            ret = temp.toString();
        }
        return ret;
    }
}

image.gif

五:数青蛙

1419. 数青蛙

image.gif 编辑

image.gif 编辑

方法一

class Solution {
    public int minNumberOfFrogs(String croakOfFrogs) {
        char[] str = croakOfFrogs.toCharArray();
        String t = "croak";
        int n = t.length();
        int[] hash = new int[n];
        Map<Character,Integer> hashMap = new HashMap<>();//<字符,字符对应下标>
        for(int i = 0 ; i < n ; i++){
            hashMap.put(t.charAt(i),i);
        }
        for(char ch : str){
            if(ch == t.charAt(0)){
                if(hash[n-1] != 0){
                    hash[n-1]--;
                    hash[0]++;
                }else{
                    hash[0]++;
                }
            }else{
                int i = hashMap.get(ch);
                if(hash[i-1] == 0){
                    return -1;
                }else{
                    hash[i-1]--;
                    hash[i]++;
                }
            }
        }
        for(int i = 0 ; i < n-1 ; i++){
            if(hash[i] != 0){
                return -1;
            }
        }
        return hash[n-1];
    }
}

image.gif

方法二

class Solution5 {
    public int minNumberOfFrogs(String croakOfFrogs) {
        //创建hash表,创建字符数组,遍历数组
        Map<Character,Integer> hash = new HashMap<>();
        char[] str = croakOfFrogs.toCharArray();
        hash.put('c',0);hash.put('r',0);hash.put('o',0);hash.put('a',0);hash.put('k',0);
        for(int i = 0 ; i < str.length ; i++){
            if(str[i] == 'c'){
                if(hash.get('k') == 0){
                    hash.put('c',hash.get('c')+1);
                }else{
                    hash.put('c',hash.get('c')+1);
                    hash.put('k',hash.get('k')-1);
                }
            }else{
                if(str[i] == 'r'){
                    if(hash.get('c') != 0){
                        hash.put('c',hash.get('c')-1);
                        hash.put('r',hash.get('r')+1);
                    }else{
                        return -1;
                    }
                }else if(str[i] == 'o'){
                    if(hash.get('r') != 0){
                        hash.put('r',hash.get('r')-1);
                        hash.put('o',hash.get('o')+1);
                    }else{
                        return -1;
                    }
                }else if(str[i] == 'a'){
                    if(hash.get('o') != 0){
                        hash.put('o',hash.get('o')-1);
                        hash.put('a',hash.get('a')+1);
                    }else{
                        return -1;
                    }
                }else if(str[i] == 'k'){
                    if(hash.get('a') != 0){
                        hash.put('a',hash.get('a')-1);
                        hash.put('k',hash.get('k')+1);
                    }else{
                        return -1;
                    }
                }else{}
            }
        }
        if(hash.get('c') != 0 || hash.get('r') != 0 ||
                hash.get('o') != 0 || hash.get('a') != 0 ){
            return -1;
        }
        int ret = hash.get('k');
        return ret;
        //判断
    }
}

image.gif


相关文章
|
7月前
模拟队列训练
模拟队列训练
37 0
|
27天前
|
前端开发 JavaScript
模拟 new 的实现
模拟 `new` 实现是指在 JavaScript 中,通过自定义函数来模拟内置的 `new` 操作符的行为,以便更好地理解其工作原理和对象构造过程。这种方式通常涉及创建一个新对象、绑定原型链、执行构造函数等步骤。
|
7月前
|
数据挖掘
R 语言中的模拟和蒙特卡洛方法
【4月更文挑战第25天】本文探讨了R语言中的模拟和蒙特卡洛方法,包括基本原理、应用场景及实际案例。通过随机数生成函数如`runif()`、`rnorm()`,R语言支持构建复杂模拟场景,应用于数值积分、风险评估和统计推断。案例分析展示了股票价格模拟和项目风险评估。掌握这些方法能提升数据分析能力,解决复杂问题,为决策提供支持。
121 1
|
7月前
|
算法
基于蒙特卡洛模拟复现谢林模型(计算机社会学)
在谢林模型中,有一片方形区域,区域又被均匀分成若干小方格;有一群被称为代理的个体,每个代理居住在一个小方格内。这些代理可以分成若干类,所有代理都希望周边8个格子尽可能住有较多的同类代理,若居住区域不满足代理的居住要求,则该代理会搬到另一区域居住。
|
7月前
|
存储 算法
算法思想总结:模拟算法
算法思想总结:模拟算法
|
7月前
|
容灾 关系型数据库 测试技术
预测与模拟
预测与模拟
57 3
|
7月前
|
机器学习/深度学习 人工智能 算法
算法02-入门算法枚举与模拟算法
算法02-入门算法枚举与模拟算法
|
SQL 监控 前端开发
模拟数据在实际场景中的应用
模拟数据在实际场景中的应用
179 0
模拟数据在实际场景中的应用
|
机器学习/深度学习 传感器 算法
Gillespie 随机模拟算法附matlab代码
Gillespie 随机模拟算法附matlab代码

热门文章

最新文章