• 第 125 场 LeetCode 双周赛题解


    A 超过阈值的最少操作数 I

    在这里插入图片描述
    在这里插入图片描述

    排序然后查找第一个大于等于 k 的元素所在的位置

    class Solution {
    public:
        int minOperations(vector<int> &nums, int k) {
            sort(nums.begin(), nums.end());
            return lower_bound(nums.begin(), nums.end(), k) - nums.begin();
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    B 超过阈值的最少操作数 II

    在这里插入图片描述
    在这里插入图片描述

    模拟:用最小堆维护数组中的最小元素

    class Solution {
    public:
        int minOperations(vector<int> &nums, int k) {
            priority_queue<long long, vector<long long>, greater<long long>> heap;
            for (auto x: nums)
                heap.push(x);
            int res = 0;
            while (heap.size() > 1 && heap.top() < k) {
                res++;
                int x = heap.top();
                heap.pop();
                int y = heap.top();
                heap.pop();
                heap.push(2LL * min(x, y) + max(x, y));
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    C 在带权树网络中统计可连接服务器对数目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    dfs:枚举 c c c ,以 c c c 的各邻接点为源点进行 d f s dfs dfs ,设各次 d f s dfs dfs 过程中路径和可以被 s i g n a l S p e e d signalSpeed signalSpeed 整除的节点数目为 a 1 , ⋯   , a k a_1,\cdots,a_k a1,,ak,则通过 c c c 可连接的服务器对的数目为 ∑ 1 ≤ i < j ≤ k a i a j \sum_{1\le i1i<jkaiaj

    class Solution {
    public:
        vector<int> countPairsOfConnectableServers(vector<vector<int>> &edges, int signalSpeed) {
            int n = edges.size() + 1;
            vector<pair<int, int>> e[n];
            for (auto &ei: edges) {
                e[ei[0]].emplace_back(ei[1], ei[2]);
                e[ei[1]].emplace_back(ei[0], ei[2]);
            }
            int cnt;
            function<void(int, int, int)> dfs = [&](int cur, int pre, int ps) {//当前路径和为ps
                if (ps % signalSpeed == 0)
                    cnt++;
                for (auto &[j, w]: e[cur])
                    if (j != pre)
                        dfs(j, cur, ps + w);
            };
            vector<int> res(n);
            for (int r = 0; r < n; r++) {
                int s = 0;//a_1+...+a_(j-1)
                for (auto &[j, w]: e[r]) {
                    cnt = 0;//a_j
                    dfs(j, r, w);
                    res[r] += s * cnt;
                    s += cnt;
                }
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    D 最大节点价值之和

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    思维 + 贪心:考虑对树上的一条路径的各边进行操作时,相当于只对路径的两段点进行了异或操作,所以等价于每次操作可以对任意两点进行。将 n u m s [ i ] ∧ k − n u m s [ i ] nums[i]\wedge k -nums[i] nums[i]knums[i] 按降序排序,然后两两一组进行操作,直到只剩一个元素或两个一组之和小于等于 0 0 0

    class Solution {
    public:
        long long maximumValueSum(vector<int> &nums, int k, vector<vector<int>> &edges) {
            vector<int> li;
            for (auto x: nums)
                li.push_back((x ^ k) - x);
            sort(li.begin(), li.end(), greater<int>());//降序排序
            long long res = accumulate(nums.begin(), nums.end(), 0LL);//原数组元素和
            long long d = 0;
            for (int i = 0; i + 1 < li.size(); i += 2)
                if (li[i] + li[i + 1] > 0) {//两两一组地进行操作
                    d += li[i] + li[i + 1];
                } else
                    break;
            return res + d;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    在WPF应用中,结合阿里矢量图标库使用Geometry图标
    [附源码]计算机毕业设计JAVAjsp-在线排课系统
    17_方法
    2023年贵州省职业院校技能大赛高职组信息安全管理与评估竞赛试题
    windows + ubuntu + vscode开发环境配置安装
    移动端日志采集与分析最佳实践
    做了一份前端面试复习计划,保熟~
    【Kotlin】初识Kotlin之面向对象
    CSS时间线样式
    Appium+python+unittest搭建UI自动化框架
  • 原文地址:https://blog.csdn.net/weixin_40519680/article/details/136465497