力扣第373场周赛
文章目录
- 力扣第373场周赛
- 循环移位后的矩阵相似检查
- 统计美丽子字符串 I
- 交换得到字典序最小的数组
- 统计美丽子字符串 II
循环移位后的矩阵相似检查
模拟,(j+k)%m计算右移,(j-k+m)%m计算左移
class Solution {
public:bool areSimilar(vector<vector<int>>& mat, int k) {int n = mat.size() , m = mat[0].size();k %= m;int ans[n][m];for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++){if(i & 1)ans[i][(j+k)%m] = mat[i][j];else ans[i][(j-k+m)%m]=mat[i][j]; }}for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++){if(ans[i][j] != mat[i][j])return false;}}return true;}
};
统计美丽子字符串 I
前缀和暴力
class Solution {
public:int beautifulSubstrings(string s, int k) {int n = s.size();int v[n+5] , c[n+5];v[0] = c[0] = 0;for(int i = 0 ; i < n ; i ++){v[i+1]=v[i];c[i+1]=c[i];if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'){v[i+1]++;}else{c[i+1]++;}}int ans = 0;for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j <= i ; j ++){int x = v[i+1]-v[j] , y = c[i+1]-c[j];if(x == y && ((x * y) % k == 0))ans ++;}}return ans;}
};
交换得到字典序最小的数组
分段排序后排序,难在模拟
class Solution {
public:vector<int> lexicographicallySmallestArray(vector<int>& nums, int limit) {//第一部分排序int n = nums.size();vector<pair<int,int>>v;//每个点值,下标for(int i = 0 ; i < n ; i ++)v.emplace_back(nums[i] , i);sort(v.begin(),v.end());//第二部分分段vector<vector<pair<int,int>>>segs;//段int last = -limit;for(int i = 0 ; i < n ; i ++){ //vif(v[i].first - last > limit)segs.push_back({});//新段segs.back().push_back(v[i]);last = v[i].first;}//第三部分回填vector<int>ans(n);for(auto &seg : segs){vector<int> pos;for (auto &p : seg) pos.push_back(p.second);//取所有下标排序sort(pos.begin(), pos.end());for (int i = 0; i < seg.size(); i++) ans[pos[i]] = seg[i].first;}return ans;}
};
统计美丽子字符串 II
补题…