2025.12.02 力扣每日一题

2141.同时运行N台电脑的最长时间

难难难

cpp 复制代码
class Solution {
public:
    long long maxRunTime(int n, vector<int>& batteries) {
        // reduce累加函数,用于计算所有电池的总电量
        // 总电量决定了 "同时运行 n 台电脑" 的理论上限(最多能运行 tot / n
        // 分钟,因为 n 台电脑同时运行时,每分钟消耗 n 单位电量)。
        long long tot = reduce(batteries.begin(), batteries.end(), 0LL);
        // 二分查找的初始化
        long long l = 0, r = tot / n + 1; 
        //l(左边界):最短可能时间(0 分钟)。
        //r(右边界):最长可能时间(总电量除以n,加 1 是为了覆盖边界情况)。
        while (l + 1 < r) {
            long long x = l + (r - l) / 2; // 中间值(当前尝试的运行时间)
            long long sum = 0;
            for (long long b : batteries) {
                sum += min(b,x); // 每个电池最多贡献x分钟(因为运行x分钟的话,电池用不完也只能贡献x)
            }
            // 判断:如果总贡献>=n*x(n台电脑运行x分钟需要的总电量),说明x可行
            (n * x <= sum ? l : r) = x;
            // 语法结构:(条件 ? 变量A : 变量B) = 值;
            // 等价于:如果条件成立,就把「值」赋给变量A;否则,把「值」赋给变量 B 
            // x 可行就把左边界右移(尝试更长时间),x 不可行就把右边界左移(尝试更短时间)
        }
        //二分结束后,l 就是最大的可行时间(因为循环条件是l+1 < r,最终 l 会停在最大的可行值)
        return l;
    }
};
相关推荐
不染尘.1 分钟前
最短路径之Bellman-Ford算法
开发语言·数据结构·c++·算法·图论
big_rabbit05024 分钟前
JVM堆内存查看命令
java·linux·算法
m0_662577976 分钟前
C++中的RAII技术深入
开发语言·c++·算法
旖-旎6 分钟前
二分查找(点名)(8)
c++·算法·二分查找·力扣
承渊政道9 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
lemonth11 分钟前
图形推理----
人工智能·算法·机器学习
2401_8914821722 分钟前
C++代码复杂性分析
开发语言·c++·算法
keep intensify23 分钟前
单词搜索-
算法·深度优先
zx_zx_12324 分钟前
定长滑动窗口和不定长滑动窗口
数据结构·算法
mjhcsp30 分钟前
C++ 梯度下降法(Gradient Descent):数值优化的核心迭代算法
开发语言·c++·算法