leetcode第317场周赛补题

第一题:6220. 可被三整除的偶数的平均值

原题链接

思路:简单的模拟而已

class Solution {
public:
    int averageValue(vector& nums) {
        int res = 0, count = 0;
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] % 3 == 0 && nums[i] % 2 == 0){
                res += nums[i];
                count++;
            }
        }
        if(res) res /= count;
        return res;
    }
};

第二题:6221. 最流行的视频创作者

原题链接

思路:用两个哈希表来记录播放量总和与id,id不断更新为播放量大的或者字典序在前面的,最后将最大播放量的一个或者几个存入答案数组即可

class Solution {
public:
    vector> mostPopularCreator(vector& creators, vector& ids, vector& views) {
        int n = ids.size();
        unordered_map mp1;//记录播放量总和
        unordered_map mp2;//记录播放量最大视频的id

        for(int i = 0; i < n; i++){
            mp1[creators[i]] += views[i];
            if(mp2.count(creators[i])){
                int &t = mp2[creators[i]];
                if(views[i] > views[t] || (views[i] == views[t] && ids[i] < ids[t]))
                    t = i;
            }
            else mp2[creators[i]] = i;
        }

        long long mx = -1;
        for(auto t = mp1.begin(); t != mp1.end(); t++) mx = max(mx, t->second);

        vector> res;
        for(auto t = mp1.begin(); t != mp1.end(); t++){
            if(t->second == mx) res.push_back({t->first, ids[mp2[t->first]]});
        }

        return res;
    }
};

6222. 美丽整数的最小增量

原题链接

思路:要使整数每一位上的数字相加小于或等于target,如果一开始就小于则直接返回0,否则我们需要从个位开始进位来看是否满足题意,用tmp来记录每一位上的数字需要进位所加的数,直到进位满足题意就是所需要的值。

class Solution {
public:
    typedef long long LL;
    int sum(LL n){
        int res = 0;
        while(n){
            res += n % 10;
            n /= 10;
        }
        return res;
    }
    long long makeIntegerBeautiful(LL n, int target) {
        vector tmp;
        LL num = n, i = 0, count = 0;
        
        if(sum(n) <= target) return 0;

        while(num){
            count += num % 10 * pow(10,i);
            num /= 10;
            //cout<

第四题:6223. 移除子树后的二叉树高度

原题链接

思路:暴力来做,遍历queries,dfs来求树的深度,遇到空或者queries[i]就返回,但是数据范围在1e5内,最后几个数据会超时。可以用树状dp来解决 目前还不会该知识点 后期记得再来补

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
/*class Solution {
public:
    int dfs(TreeNode* root, int n){
        if(root == nullptr || root->val == n){
            return 0;
        }
        int leftdepth = dfs(root->left, n);       // 左
        int rightdepth = dfs(root->right, n);     // 右
        int depth = 1 + max(leftdepth, rightdepth); // 中
        return depth;
    }
    vector treeQueries(TreeNode* root, vector& queries) {
        vector res;
        for(int i = 0; i < queries.size(); i++){
            res.push_back(dfs(root, queries[i]) - 1);
        }
        return res;
    }
};
*/

你可能感兴趣的:(补题,算法,leetcode,数据结构,c++)