本文主要是介绍力扣375周赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣第375场周赛
统计已测试设备
差分数组优化
class Solution {
public:int countTestedDevices(vector<int> &batteryPercentages) {int dec = 0;for (int x : batteryPercentages) {dec += x > dec;}return dec;}
};
双模幂运算
快速幂模拟
class Solution {
public:long long qmi(int a, int b, int p)// a^b % p{long long res = 1 % p;while (b){if (b & 1) res = res * a % p;a = a * (long long)a % p;b >>= 1;}return res;}vector<int> getGoodIndices(vector<vector<int>>& variables, int target) {int n = variables.size();vector<int> ans;for(int i = 0 ; i < n ; i ++){int ai = variables[i][0] , bi = variables[i][1] , ci = variables[i][2] , mi = variables[i][3];if(qmi(qmi(ai , bi , 10) , ci , mi) == target)ans.push_back(i);}return ans;}
};
统计最大元素出现至少 K 次的子数组
滑窗统计K 次
class Solution {
public:long long countSubarrays(vector<int>& nums, int k) {int n = nums.size() , maxn = -1 ;for(auto x : nums)maxn = max(maxn , x);unordered_map<int , int> m;long long ans = 0;for(int i = 0 , j = 0 ; i < n ; i ++){m[nums[i]] ++;while(m[maxn] >= k){m[nums[j++]] --;}ans += j;}return ans;}
};
统计好分割方案的数目
区间合并求个数
class Solution {
public:int numberOfGoodPartitions(vector<int>& nums) {//找区间unordered_map<int,pair<int,int>> ps;for(int i = 0 ; i < nums.size() ; i ++){int x = nums[i];auto it = ps.find(x);if(it != ps.end()){it ->second.second = i;}else {ps[x] = {i , i};}}vector<pair<int,int>> a;for(auto &[_ , p] : ps){a.emplace_back(p);}//排序区间sort(a.begin() , a.end() , [](const auto &p , const auto &q){return p.first < q.first;});//区间合并int ans = 1;int max_r = a[0].second;for(int i = 1 ; i < a.size() ; i ++){int left = a[i].first , right = a[i].second;if(left > max_r){ans = ans * 2 % 1'000'000'007;}max_r = max(max_r, right);}return ans;}
};
–
这篇关于力扣375周赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!