第 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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步