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

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

image.png

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

展开讨论
力扣 (LeetCode)发起于 2019-12-22
最近编辑于 2019-12-22

对应四个题目的代码(第二题有惊喜)

第一题:统计位数为偶数的数字

int findNumbers(vector<int>& nums) {
        int result = 0;
        for(int i = 0; i < nums.size(); i++){
            int j = 0;
            while(nums[i]){
                j++;
                nums[i] /= 10;
            }
            if(j % 2 == 0){
                result++;
            }
        }
        return result;
    }

第二题,用一个map保存值对应的次数,然后根据连续的k个值+次数去判断。(c++中map如果不存在这个键值对,会自动创建一个且值为0)

bool isPossibleDivide(vector<int>& nums, int k) {
        if (nums.size() % k != 0)
            return false;
        if (k == 1)
            return true;
        
        map<int, int> count;
        
        for(auto& a : nums){
            count[a]++;
        }
        
        while(count.size() > 0){
            int start = count.begin()->first;
            int times = count.begin()->second;
            count.erase(start);
            for(int m = 1; m < k; m++){
                if(count[start + m] == 0 || count[start + m] < times){
                    return false;
                }
                count[start + m] -= times;
                if(count[start + m] <= 0){
                    count.erase(start + m);
                }
            }
        }
        return true;
    }

第三题:子串的最大出现次数

int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
        map<string, int> count;
        for(int i = 0; i < s.size() - minSize + 1; i++){
            string ss = s.substr(i, minSize);
            map<char,int> t;
            for(auto& c : ss){
                t[c];
            }
            if(t.size() <= maxLetters){
                count[ss]++;
            }
        }
        if(count.size() <= 0){
            return 0;
        }
        int result = 0;
        for(auto& a : count){
            if(a.second > result){
                result = a.second;
            }
        }
        return result;
    }

第四题:你能从盒子里获得的最大糖果数

int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {
        queue<int> boxs;
        vector<int> havaBoxs;
        map<int, int> ks;
        int result = 0;

        for(auto& i : initialBoxes){
            if(status[i]){
                boxs.push(i);
            }else{
                havaBoxs.push_back(i);
            }
        }

        while(!boxs.empty()){
            result += candies[boxs.front()];
            havaBoxs.insert(havaBoxs.begin(), containedBoxes[boxs.front()].begin(), containedBoxes[boxs.front()].end());
            for(int key : keys[boxs.front()]){
                ks[key] = 1;
            }
            for(int i = 0; i < havaBoxs.size();){
                if(ks[havaBoxs[i]] || status[havaBoxs[i]]){
                    boxs.push(havaBoxs[i]);
                    havaBoxs.erase(havaBoxs.begin() + i);
                }else{
                    i++;
                }
            }
            boxs.pop();
        }

        return result;
    }
1
展开全部 16 讨论