Welcome To Ke_scholar|

Ke_scholar

园龄:2年2个月粉丝:30关注:10

2023-08-01 10:45阅读: 23评论: 0推荐: 0

第 356 场周赛 - 力扣(LeetCode)

第 356 场周赛 - 力扣(LeetCode)

2798. 满足目标工作时长的员工数目 - 力扣(LeetCode)

一次遍历

class Solution {
public:
int numberOfEmployeesWhoMetTarget(vector<int>& hours, int target) {
int ans = 0;
for(auto i : hours)
ans += (i >= target);
return ans;
}
};

2799. 统计完全子数组的数目 - 力扣(LeetCode)(滑动窗口)

先求出数组中不同元素的个数,然后去遍历,用一个哈希表记录遍历过的元素,如果找到一个区间\([l,r]\)满足条件,就让\(ans\)加上\(nums.size() - r\),因为对于这样的一个区间,如果\([l,r]\)是满足条件的,那么\(r+1,r+2 \dots n\)也一定是满足条件的,因为不同元素的个数已经满足,往后也不会再有新的元素,然后就是去每次更新窗口的前端,将那些前面有重复的去掉

class Solution {
public:
int countCompleteSubarrays(vector<int>& nums) {
int num = unordered_set<int>(nums.begin(), nums.end()).size();
unordered_map<int,int> mp;
int l = 0, ans = 0;
for(int r = 0;r < nums.size(); r++){
mp[nums[r]]++;
while(mp.size() == num){
ans += nums.size() - r;
mp[nums[l]]--;
if(mp[nums[l]] == 0)
mp.erase(nums[l]);
l++;
}
}
return ans;
}
};

2800. 包含三个字符串的最短字符串 - 力扣(LeetCode)

因为只有三个字符串,所以我们可以直接对三个字符串进行全排列枚举,也因为全排列枚举了所有情况,所以我们去合并的时候直接就看串\(a\)的后面能不能接\(b\)就行了

class Solution {
public:
string merge(string a,string b){
if(a.find(b) != -1) return a;
if(b.find(a) != -1) return b;
for(int i = min(a.size(),b.size());i > 0;i--)
if(a.substr(a.size() - i) == b.substr(0,i))
return a + b.substr(i);
return a + b;
}
string minimumString(string a, string b, string c) {
vector<string> str{a,b,c};
sort(str.begin(),str.end());
string ans = a + b + c;
do{
string Ke = merge(merge(str[0],str[1]),str[2]);
if(Ke.size() < ans.size() || Ke.size() == ans.size() && Ke < ans)
ans = Ke;
}while(next_permutation(str.begin(), str.end()));
return ans ;
}
};

2801. 统计范围内的步进数字数目 - 力扣(LeetCode)(数位dp)

后面学了再来补题qwq

本文作者:Ke_scholar

本文链接:https://www.cnblogs.com/Kescholar/p/17595887.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ke_scholar  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起