leetcode 2141

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

k 是可以通过二分查找确定的。如果可以运行 k 分钟,那么也一定可以运行 k−1,k−2,⋯ 分钟。因此一定存在一个 k′,使得我们可以运行 ≤k′分钟,但不能运行 >k′分钟,此时 k′就是我们需要求出的答案。

思路:运行时间k是有范围限制的,因此可以考虑二分查找。

1.假设可以让 n 台电脑同时运行 x 分钟,那么对于电量大于 x 的电池,其只能被使用 x 分钟,因此每个电池的使用时间至多为 min(batteries[i],x)。累加所有电池的使用时间,记作 sum。那么要让 n 台电脑同时运行 x 分钟,必要条件是 n⋅x≤sum。

2.当 总的可供电时间>=mid*n,代表当前mid可行

  • 开区间左端点初始值:0,不运行任何电脑,一定满足要求。
  • 开区间右端点初始值:平均值加一,即 ⌊∑batteries[i] / n⌋+1。一定无法满足要求。

下面代码采用开区间二分:

复制代码
class Solution {
public:
    long long maxRunTime(int n, vector<int>& batteries) {
        long long tot=reduce(batteries.begin(),batteries.end(),0LL);
        long long l=0,r=tot/n+1;
        while(l+1<r){
            long long mid=l+(r-l)/2;
            long long sum=0;
            for(long long b :batteries){
                sum+=min(b,mid);   //表示可以让 n 台电脑同时运行mid分钟
            }
            if(n*mid <= sum)l=mid;
            else r=mid;
        }

        return l;
    }
};
相关推荐
秋邱1 小时前
2025 年突破性科技:大模型驱动的实时多模态数据流处理系统
人工智能·科技·算法·机器学习
qq_433554541 小时前
C++ 最长单调子序列
c++·算法·图论
明洞日记1 小时前
【数据结构手册005】树结构入门 - 从二叉树到层次智慧
网络·数据结构·c++
youngee111 小时前
hot100-39二叉树层序遍历
数据结构·算法
深蓝电商API1 小时前
爬虫请求参数签名算法逆向(md5、aes、rsa、sm2 全套)
爬虫·算法·状态模式
未可知7771 小时前
软件设计师(下午题2)、UML与设计模式
算法·设计模式·职场和发展·uml
啊吧怪不啊吧1 小时前
贪心算法(局部最优实现全局最优)第二篇
大数据·算法·leetcode·贪心算法
杰克尼1 小时前
蓝桥云课-小蓝做题
java·数据结构·算法
卿雪1 小时前
MySQL【索引】篇:索引的分类、B+树、创建索引的原则、索引失效的情况...
java·开发语言·数据结构·数据库·b树·mysql·golang