LeetCode周赛——383

1.边界上的蚂蚁(模拟)

在这里插入图片描述

class Solution {
   
public:
    int returnToBoundaryCount(vector<int>& nums) {
   
        int n = nums.size();
        int res = 0, cnt = 0;
        for(int i = 0; i < n; i++){
   
            res += nums[i];
            if(res == 0) cnt++;
        }
        return cnt;
    }
};

2.将单词恢复初始状态所需的最短时间 I(Z函数)

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

class Solution {
   
public:
    int minimumTimeToInitialState(string word, int k) {
   
        int n = word.size();
        vector<int> z(n);
        z[0] = n - 1;
        // z函数匹配
        for(int i = 1, l = 0, r = 0; i < n; i++){
   
            if(i <= r) z[i] = min(z[i - l], r - i + 1);
            while(word[z[i]] == word[i + z[i]]) z[i]++;
            if(i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
        }
        for(int i = 1; i < n; i++){
   
            // 如果是k的倍数,且后缀和前缀匹配,那就返回操作次数
            if(i % k == 0 && z[i] == n - i) return i / k;
        }
        // n / k 向上取整 
        return (n - 1) / k + 1;
    }
};

3.找出网格的区域平均强度(模拟)

在这里插入图片描述

class Solution {
   
public:
    vector<vector<int>> resultGrid(vector<vector<int>>& image, int threshold) {
   
        int n = image.size();
        int m = image[0].size();
        // 存储平均值
        vector<vector<int>> res(n, vector<int>(m, 0));
        // 存储每个区域重合多少次 
        vector<vector<int>> cnt(n, vector<int>(m, 0));
        // 遍历右下角下角
        for(int i = 2; i < n; i++){
   
            for(int j = 2; j < m; j++){
   
                int f = 1;
                // 检查左右相邻的格子
                for(int k = i - 2; k <= i; k++){
   
                    if(abs(image[k][j - 2] - image[k][j - 1]) > threshold || abs(image[k][j - 1] - image[k][j]) > threshold){
   
                        f = 0;
                        break;
                    }           
                }
                if(!f) continue;
                // 检查上下相邻的格子
                for(int k = j - 2; k <= j; k++){
   
                    if(abs(image[i - 2][k] - image[i - 1][k]) > threshold || abs(image[i - 1][k] - image[i][k]) > threshold){
   
                        f = 0;
                        break;
                    }
                }
                if(!f) continue;
                // 计算平均值
                int avg = 0;
                for(int k = i - 2; k <= i; k++){
   
                    for(int z = j - 2; z <= j; z++){
   
                        avg += image[k][z];
                    }
                }
                avg /= 9;
                // 累加每个位置的平均值和统计每个位置重合次数
                for(int k = i - 2; k <= i; k++){
   
                    for(int z = j - 2; z <= j; z++){
   
                        res[k][z] += avg;
                        cnt[k][z]++;
                    }
                }
            }
        }
        for(int i = 0; i < n; i++){
   
            for(int j = 0; j < m; j++){
   
                if(!cnt[i][j]) res[i][j] = image[i][j];
                else res[i][j] /= cnt[i][j];
            }
        }
        return res;
    }
};

4.将单词恢复初始状态所需的最短时间 II(z函数)

class Solution {
   
public:
    int minimumTimeToInitialState(string word, int k) {
   
        int n = word.size();
        vector<int> z(n);
        z[0] = n - 1;
        // z函数匹配
        for(int i = 1, l = 0, r = 0; i < n; i++){
   
            if(i <= r) z[i] = min(z[i - l], r - i + 1);
            while(word[z[i]] == word[i + z[i]]) z[i]++;
            if(i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
        }
        for(int i = 1; i < n; i++){
   
            // 如果是k的倍数,且后缀和前缀匹配,那就返回操作次数
            if(i % k == 0 && z[i] == n - i) return i / k;
        }
        // n / k 向上取整 
        return (n - 1) / k + 1;
    }
};

相关推荐

最近更新

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

    2024-02-15 19:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-15 19:32:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-15 19:32:02       82 阅读
  4. Python语言-面向对象

    2024-02-15 19:32:02       91 阅读

热门阅读

  1. gorm day8

    2024-02-15 19:32:02       34 阅读
  2. 面试计算机网络框架八股文十问十答第五期

    2024-02-15 19:32:02       61 阅读
  3. C++ Primer Plus笔记1

    2024-02-15 19:32:02       47 阅读
  4. 蓝桥杯每日一题(python)

    2024-02-15 19:32:02       61 阅读
  5. leetcode 102.二叉树的层序遍历

    2024-02-15 19:32:02       48 阅读
  6. day 31贪心

    2024-02-15 19:32:02       65 阅读
  7. Linux 目录结构结构

    2024-02-15 19:32:02       58 阅读
  8. SQL世界之命令语句Ⅴ

    2024-02-15 19:32:02       33 阅读
  9. Python json解析

    2024-02-15 19:32:02       47 阅读
  10. CSS进阶

    CSS进阶

    2024-02-15 19:32:02      41 阅读
  11. LeetCode 29天 回溯算法05

    2024-02-15 19:32:02       65 阅读