[2141] 同时运行 N 台电脑的最长时间
This commit is contained in:
parent
f3af494251
commit
bd2feb1297
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* @lc app=leetcode.cn id=2141 lang=javascript
|
||||
* @lcpr version=
|
||||
*
|
||||
* [2141] 同时运行 N 台电脑的最长时间
|
||||
*/
|
||||
|
||||
// @lc code=start
|
||||
/**
|
||||
* @param {number} n
|
||||
* @param {number[]} batteries
|
||||
* @return {number}
|
||||
*/
|
||||
var maxRunTime = function(n, batteries) {
|
||||
let sum = batteries.reduce((acc, val) => acc + val, 0);
|
||||
let left = 0, right = Math.floor(sum / n), ans = 0;
|
||||
|
||||
while (left <= right) {
|
||||
let mid = Math.floor((left + right) / 2);
|
||||
let total = 0;
|
||||
for (let cap of batteries) {
|
||||
total += Math.min(cap, mid);
|
||||
}
|
||||
/**
|
||||
* 关键理解(一个电池只能给一台电脑供电):
|
||||
* 1. 如果电池数量 batteries.length < n(电脑数量),那么:
|
||||
* - 最多只能有 batteries.length 台电脑同时运行
|
||||
* - 即使每个电池都贡献 mid,total = batteries.length * mid < n * mid
|
||||
* - 所以 total >= n * mid 的条件会自动排除这种情况
|
||||
*
|
||||
* 2. 如果电池数量 batteries.length >= n,那么:
|
||||
* - 每个电池最多贡献 Math.min(cap, mid)
|
||||
* - 如果 total >= n * mid,说明总电量足够,可以用贪心策略分配:
|
||||
* * 优先用容量 >= mid 的电池(每个贡献 mid)给 n 台电脑各分配 mid 分钟
|
||||
* * 剩余的小电池补充不足的部分
|
||||
* - 如果 total < n * mid,说明即使最优分配也无法满足
|
||||
*
|
||||
* 因此,total >= n * mid 是充分必要条件!
|
||||
*/
|
||||
|
||||
if (total >= n * mid) {
|
||||
ans = mid;
|
||||
left = mid + 1;
|
||||
} else {
|
||||
right = mid - 1;
|
||||
}
|
||||
}
|
||||
return ans;
|
||||
};
|
||||
|
||||
console.log(maxRunTime(237,[8249,4114,2829,2270,3994,1868,1414,5503,7524,4500,1397,9127,1486,2355,797,4749,3246,7707,8744,9500,9720,2905,5418,4810,8778,5026,6419,3808,9385,6509,4086,2467,9611,1141,7394,8630,5892,3945,271,2896,1552,5524,806,6221,8931,1380,1365,1953,3199,4306,7447,2527,8947,2270,4266,1081,6657,8918,7465,9515,4905,6097,9812,5648,5199,4891,1391,7999,6332,6889,6193,9629,3297,6617,9933,3191,6514,1549,5459,8710,6255,1565,5020,2623,8643,9346,3310,1945,4885,827,330,6309,9968,7105,88,9426,4561,4735,9280,9479,5198,845,5981,1415,8795,751,2893,8027,2603,3280,4090,7472,6530,7786,8716,5443,5017,5226,1704,9487,5891,2312,6352,20,4702,8997,962,7786,4557,7021,4873,734,8646,895,1731,1400,8983,9025,7866,113,478,8837,2311,7823,296,1934,2651,7059,8197,3609,4946,8182,8234,9355,2525,1195,200,6338,9653,4183,4599,933,8839,728,1879,2317,7866,7339,3755,2256,4458,2321,946,4211,5197,4247,100,7616,7066,131,5336,2352,6860,9494,837,167,2754,482,7693,5011,7919,1921,2565,9173,5523,1460,3455,4378,5035,734,8920,8111,9175,1492,328,2843,705,6564,3284,3506,9085,667,8395,6086,5784,4822,7654,5875,8018,5103,1239,7829,491,157,5819,1794,5357,2989,6814,7442,9634,2389,532,207,5769,3204,5447,1324,3600,5610,2702,1112,720,3052,9335,7050,2685,1326,2739,5709,3099,877,8265,9094,8591,9309,9823,2638,8939,5614,7100,4147,9772,6138,3952,2856,1436,9189,4139,1705,7324,1494,3817,6814,3255,5435,9977,17,7299,6706,6849,4451,8491,9125,7809,2516,3864,9562]));
|
||||
// @lc code=end
|
||||
|
||||
/*
|
||||
// @lcpr case=start
|
||||
// 2\n[3,3,3]\n
|
||||
// @lcpr case=end
|
||||
|
||||
// @lcpr case=start
|
||||
// 2\n[1,1,1,1]\n
|
||||
// @lcpr case=end
|
||||
|
||||
*/
|
||||
Loading…
Reference in New Issue