本文主要是介绍【LeetCode周赛】第 394 场周赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 3120. 统计特殊字母的数量 I 简单
- 3121. 统计特殊字母的数量 II 中等
- 3122. 使矩阵满足条件的最少操作次数 中等
- 3123. 最短路径中的边 困难
3120. 统计特殊字母的数量 I 简单
3120. 统计特殊字母的数量 I
分析:
模拟即可
代码:
class Solution {
public:int numberOfSpecialChars(string word) {int n = word.size();vector<int> v1(26, 0),v2(26, 0);for(int i=0;i<n;i++){auto c = word[i];if('a' <= c && c <= 'z') v1[c - 'a']++ ;else if('A' <= c && c <= 'Z') v2[c - 'A']++;}int ans = 0;for(int i=0;i<26;i++){if(v1[i] > 0 && v2[i] > 0) ans++;}return ans; }
};
3121. 统计特殊字母的数量 II 中等
3121. 统计特殊字母的数量 II
分析:
记录每个大写字母的第一次出现的下标,记录每个小写字母最后一次出现的下标,比较对应的大写字母与小写字母的下标,若前者更大则符合要求。
代码:
class Solution {
public:int numberOfSpecialChars(string word) {int n = word.size();vector<int> v1(26, -1),v2(26, n);for(int i=0;i<n;i++){auto c = word[i];if('a' <= c && c <= 'z') v1[c - 'a'] = max(v1[c - 'a'], i);else if('A' <= c && c <= 'Z') v2[c - 'A'] = min(v2[c - 'A'], i);}int ans = 0;for(int i=0;i<26;i++){if(v1[i] != -1 && v2[i] < n && v1[i] < v2[i]) ans++;}return ans;}
};
3122. 使矩阵满足条件的最少操作次数 中等
3122. 使矩阵满足条件的最少操作次数
分析:
统计每一列的不同数字的出现次数,根据统计情况以及约束:连续两列的数字不能为相同的值,进行动态规划。
代码:
class Solution {
public:int minimumOperations(vector<vector<int>>& grid) {int n = grid.size(), m = grid[0].size();vector<vector<int>> cnt(m, vector<int>(10,0));for(int i=0;i<n;i++){for(int j=0;j<m;j++){cnt[j][grid[i][j]]++;}}for(int i=1;i<m;i++){for(int j=0;j<10;j++){int c = 0;for(int k=0;k<10;k++){if(k==j) continue;c=max(c,cnt[i-1][k]);}cnt[i][j]+=c;}}int ans = 0;for(int i=0;i<10;i++) ans = max(ans, cnt[m-1][i]);return n*m - ans;}
};
3123. 最短路径中的边 困难
3123. 最短路径中的边
分析:
待解决。
代码:
#include<bits/stdc++>
int main(){return 0;
}
这篇关于【LeetCode周赛】第 394 场周赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!