首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >算法奇妙屋(二)-模拟

算法奇妙屋(二)-模拟

作者头像
景画
发布2025-12-19 12:40:09
发布2025-12-19 12:40:09
40
举报

一. 力扣6. Z 字形变换

1. 题目

2. 算法原理


3. 代码

代码语言:javascript
复制
    public String convert(String s, int numRows) {
        if (numRows == 1) {
            return s;
        }
        int len = s.length();
        int d = 2 * numRows - 2;
        StringBuffer ret = new StringBuffer();
        for (int i = 0; i < len; i += d) {
            ret.append(s.charAt(i));
        }
        for (int k = 1; k < numRows - 1; k++) {
            for (int i = k, j = d - i; i < len || j < len; i += d, j += d) {
                if (i < len) {
                    ret.append(s.charAt(i));
                }
                if (j < len) {
                    ret.append(s.charAt(j));
                }
            }
        }
        for (int i = numRows - 1; i < len; i += d) {
            ret.append(s.charAt(i));
        }
        return ret.toString();
    }

二. 力扣38. 外观数列

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码

代码语言:javascript
复制
    public String countAndSay(int n) {
        String ret = "1";
        for (int i = 1; i < n; i++) {
            StringBuilder ss = new StringBuilder();
            int left = 0;
            int right = 0;
            int len = ret.length();
            while(left < len && right < len) {
                while(left < len && right < len && ret.charAt(right) == ret.charAt(left)) {
                    right++;
                }
                ss.append(Integer.toString(right - left));
                ss.append(ret.charAt(left));
                left = right;
            }
            ret = ss.toString();
        }
        return ret;
    }

三. 力扣495. 提莫攻击

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码

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

四. 力扣1419. 数青蛙

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码1(暴力通俗易懂)

代码语言:javascript
复制
    public int minNumberOfFrogs(String croakOfFrogs) {
        int[] arr = new int[128];
        for (int i = 0; i < croakOfFrogs.length(); i++) {
            char ch = croakOfFrogs.charAt(i);
            if (ch == 'c') {
                if (arr['k'] == 0) {
                    arr['c']++;
                }else {
                    arr['k']--;
                    arr['c']++;
                }
            }else if (ch == 'r') {
                if (arr['c'] != 0) {
                    arr['c']--;
                    arr['r']++;
                }else {
                    return -1;
                }
            }else if (ch == 'o') {
                if (arr['r'] != 0) {
                    arr['r']--;
                    arr['o']++;
                }else {
                    return -1;
                }
            }else if (ch == 'a') {
                if (arr['o'] != 0) {
                    arr['o']--;
                    arr['a']++;
                }else {
                    return -1;
                }
            }else if (ch == 'k') {
                if (arr['a'] != 0) {
                    arr['a']--;
                    arr['k']++;
                }else {
                    return -1;
                }
            }
        }
        if (arr['c'] != 0 || arr['r'] != 0 || arr['o'] != 0 || arr['a'] != 0) {
            return -1;
        }
        return arr['k'];
    }

4. 代码2(哈希映射)

代码语言:javascript
复制
    public int minNumberOfFrogs(String croakOfFrogs) {
        char[] c = croakOfFrogs.toCharArray();
        String s = "croak";
        int n = s.length();
        int[] hash = new int[n];
        HashMap<Character,Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            map.put(s.charAt(i),i); // 哈希表中让哈希值key与下标value对应
        }
        for (char ch : c) {
            int index = map.get(ch);
            if (index == 0) {
                if (hash[n - 1] != 0) {
                    hash[n - 1]--;
                }
                hash[index]++;
            }else {
                if (hash[index - 1] != 0) {
                    hash[index - 1]--;
                    hash[index]++;
                }else {
                    return -1;
                }
            }
        }
        for (int i = 0; i < n - 1; i++) {
            if (hash[i] != 0) {
                return -1;
            }
        }
        return hash[n - 1];
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 力扣6. Z 字形变换
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 二. 力扣38. 外观数列
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 三. 力扣495. 提莫攻击
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 四. 力扣1419. 数青蛙
    • 1. 题目
    • 2. 算法原理
    • 3. 代码1(暴力通俗易懂)
    • 4. 代码2(哈希映射)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档