leetcode第317场周赛补题

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

原题链接

思路:简单的模拟而已

class Solution {
public:
    int averageValue(vector<int>& 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<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) {
        int n = ids.size();
        unordered_map<string,long long> mp1;//记录播放量总和
        unordered_map<string,int> 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<vector<string>> 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<LL> 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<<count<<" ";
            tmp.push_back(pow(10,i + 1) - count);
            i++;
        }

        for(int i = 0; i < tmp.size(); i++){
            if(sum(n + tmp[i]) <= target) return tmp[i];
        }

        return 0;
    }
};

第四题: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<int> treeQueries(TreeNode* root, vector<int>& queries) {
        vector<int> res;
        for(int i = 0; i < queries.size(); i++){
            res.push_back(dfs(root, queries[i]) - 1);
        }
        return res;
    }
};
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值