讨论/题目交流/🏆 第 168 场力扣周赛/
🏆 第 168 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

3 分 - 统计位数为偶数的数字
4 分 - 划分数组为连续数字的集合
6 分 - 子串的最大出现次数
7 分 - 你能从盒子里获得的最大糖果数

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int res = 0;
        for(auto n:nums){
            int cnt = 0;
            while(n){
                cnt ++;
                n /= 10;
            }
            if(cnt % 2 == 0)
                res++;
        }
        return res;
        
    }
};

划分数组为连续数字的集合

class Solution {
public:
    bool isPossibleDivide(vector<int>& nums, int k) {
        if(nums.size() % k != 0)
            return false;
        sort(nums.begin(), nums.end());
        map<int, int> hash;
        for(auto s:nums) hash[s]++;
        int size = nums.size() / k;
        for(int i = 0; i < size; i ++){
            int index = 0;
            while(hash[nums[index]] == 0) index++;
            int start = nums[index];
            for(int j = start; j < start + k; j ++){
                if(hash[j] == 0)
                    return false;
                else
                    hash[j]--;
            }
        }
        return true;
        
    }
};

子串的最大出现次数

class Solution {
public:
    int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
        int res = 0;
        set<string> sons;
        map<string, int> hash;
        for(int len = minSize; len <= minSize; len ++){
            for(int i = 0; i < s.size() - len + 1; i ++){
                string son = s.substr(i, len);
                if(getLetters(son) <= maxLetters){
                    hash[son] ++;
                }
            }
        }
        auto it = hash.begin();
        while(it != hash.end()){
            res = max(res, it->second);
            it ++;
        }
        return res;
    }
    int getLetters(string son){
        int cnt = 0;
        set<char> hash;
        for(auto s:son){
           hash.insert(s);
        }
        return hash.size();
    }
};

你能从盒子里获得的最大糖果数

class Solution {
public:
    int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {
        int n = status.size();
        vector<int> hash(n, 0);
        int res = 0;
        queue<int> que;
        int flag;
        for(auto i:initialBoxes) que.push(i);
        while(!que.empty()){
            int now = que.front();
            hash[now] = 1;
            que.pop();
            if(status[now] == 1){
                res += candies[now];
                for(auto temp:keys[now]){
                    status[temp] = 1;
                }
                for(auto temp:containedBoxes[now]){
                    que.push(temp);
                }
            }
            else{
                if(flag == now)
                    break;
                flag = now;
                
                que.push(now);
            }
        }
            
        return res;
    }
};
展开全部 16 讨论