前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 2141. 同时运行 N 台电脑的最长时间(二分查找)

LeetCode 2141. 同时运行 N 台电脑的最长时间(二分查找)

作者头像
Michael阿明
发布2022-03-10 18:06:55
5460
发布2022-03-10 18:06:55
举报

文章目录

1. 题目

你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries ,其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟。 你想使用这些电池让 全部 n 台电脑 同时 运行。

一开始,你可以给每台电脑连接 至多一个电池 。 然后在任意整数时刻,你都可以将一台电脑与它的电池断开连接,并连接另一个电池,你可以进行这个操作 任意次 。 新连接的电池可以是一个全新的电池,也可以是别的电脑用过的电池。 断开连接和连接新的电池不会花费任何时间。

注意,你不能给电池充电。

请你返回你可以让 n 台电脑同时运行的 最长 分钟数。

示例 1:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:n = 2, batteries = [3,3,3]
输出:4
解释:
一开始,将第一台电脑与电池 0 连接,第二台电脑与电池 1 连接。
2 分钟后,将第二台电脑与电池 1 断开连接,并连接电池 2 。注意,电池 0 还可以供电 1 分钟。
在第 3 分钟结尾,你需要将第一台电脑与电池 0 断开连接,然后连接电池 1 。
在第 4 分钟结尾,电池 1 也被耗尽,第一台电脑无法继续运行。
我们最多能同时让两台电脑同时运行 4 分钟,所以我们返回 4 。

示例 2:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:n = 2, batteries = [1,1,1,1]
输出:2
解释:
一开始,将第一台电脑与电池 0 连接,第二台电脑与电池 2 连接。
一分钟后,电池 0 和电池 2 同时耗尽,所以你需要将它们断开连接,并将电池 1 和第一台电脑连接,电池 3 和第二台电脑连接。
1 分钟后,电池 1 和电池 3 也耗尽了,所以两台电脑都无法继续运行。
我们最多能让两台电脑同时运行 2 分钟,所以我们返回 2 。
 
提示:
1 <= n <= batteries.length <= 10^5
1 <= batteries[i] <= 10^9

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-running-time-of-n-computers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 二分查找答案 mid
  • 对于电池 >= mid 的,只能给一个电脑使用
  • < mid 的电池,可以凑起来给一个电脑使用
代码语言:javascript
复制
class Solution {
public:
    long long maxRunTime(int n, vector<int>& batteries) {
        long long l = 1, r = 1e15, mid, ans = 0;
        while(l <= r)
        {
            mid = (l+r)>>1;
            if(ok(batteries, mid, n))
            {
                ans = mid;
                l = mid+1;
            }
            else
                r = mid-1;
        }
        return ans;
    }
    bool ok(vector<int>& bat, long long t, int n)
    {
        long long num = 0, total = 0;
        for(auto b : bat)
        {
            if(b >= t) num++; // 大于mid的电池给一个电脑使用
            else
            {
                total += b;
                if(total >= t)//凑起来的电量给一个电脑使用
                {
                    num++;
                    total -= t;
                }
            }
        }
        return num >= n; // 能够满足 n 个电脑
    }
};

140 ms 54.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档