日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2141. 同时运行 N 台电脑的最长时间(二分查找) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

你有 n 臺電腦。給你整數(shù) n 和一個下標(biāo)從 0 開始的整數(shù)數(shù)組 batteries ,其中第 i 個電池可以讓一臺電腦 運行 batteries[i] 分鐘。
你想使用這些電池讓 全部 n 臺電腦 同時 運行。

一開始,你可以給每臺電腦連接 至多一個電池 。
然后在任意整數(shù)時刻,你都可以將一臺電腦與它的電池斷開連接,并連接另一個電池,你可以進(jìn)行這個操作 任意次
新連接的電池可以是一個全新的電池,也可以是別的電腦用過的電池。
斷開連接和連接新的電池不會花費任何時間。

注意,你不能給電池充電。

請你返回你可以讓 n 臺電腦同時運行的 最長 分鐘數(shù)。

示例 1:

輸入:n = 2, batteries = [3,3,3] 輸出:4 解釋: 一開始,將第一臺電腦與電池 0 連接,第二臺電腦與電池 1 連接。 2 分鐘后,將第二臺電腦與電池 1 斷開連接,并連接電池 2 。注意,電池 0 還可以供電 1 分鐘。 在第 3 分鐘結(jié)尾,你需要將第一臺電腦與電池 0 斷開連接,然后連接電池 1 。 在第 4 分鐘結(jié)尾,電池 1 也被耗盡,第一臺電腦無法繼續(xù)運行。 我們最多能同時讓兩臺電腦同時運行 4 分鐘,所以我們返回 4

示例 2:

輸入:n = 2, batteries = [1,1,1,1] 輸出:2 解釋: 一開始,將第一臺電腦與電池 0 連接,第二臺電腦與電池 2 連接。 一分鐘后,電池 0 和電池 2 同時耗盡,所以你需要將它們斷開連接,并將電池 1 和第一臺電腦連接,電池 3 和第二臺電腦連接。 1 分鐘后,電池 1 和電池 3 也耗盡了,所以兩臺電腦都無法繼續(xù)運行。 我們最多能讓兩臺電腦同時運行 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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 二分查找答案 mid
  • 對于電池 >= mid 的,只能給一個電腦使用
  • < mid 的電池,可以湊起來給一個電腦使用
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;}elser = 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/

長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 2141. 同时运行 N 台电脑的最长时间(二分查找)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。