生活随笔
收集整理的這篇文章主要介紹了
LeetCode LCP 12. 小张刷题计划(二分查找)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
為了提高自己的代碼能力,小張制定了 LeetCode 刷題計劃,他選中了 LeetCode 題庫中的 n 道題,編號從 0 到 n-1,并計劃在 m 天內(nèi)按照題目編號順序刷完所有的題目(注意,小張不能用多天完成同一題)。
在小張刷題計劃中,小張需要用 time[i] 的時間完成編號 i 的題目。
此外,小張還可以使用場外求助功能,通過詢問他的好朋友小楊題目的解法,可以省去該題的做題時間。
為了防止“小張刷題計劃”變成“小楊刷題計劃”,小張每天最多使用一次求助。
我們定義 m 天中做題時間最多的一天耗時為 T(小楊完成的題目不計入做題總時間)。
請你幫小張求出最小的 T是多少。
示例
1:
輸入:time
= [1,2,3,3], m
= 2
輸出:
3
解釋:第一天小張完成前三題,其中第三題找小楊幫忙;
第二天完成第四題,并且找小楊幫忙。
這樣做題時間最多的一天花費(fèi)了
3 的時間,并且這個值是最小的。示例
2:
輸入:time
= [999,999,999], m
= 4
輸出:
0
解釋:在前三天中,小張每天求助小楊一次,這樣他可以在三天內(nèi)完成所有的題目并不花任何時間。限制:
1 <= time
.length
<= 10^5
1 <= time
[i
] <= 10000
1 <= m
<= 1000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/xiao-zhang-shua-ti-ji-hua
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
類似題目:
LeetCode 875. 愛吃香蕉的珂珂(二分查找)
LeetCode 1011. 在 D 天內(nèi)送達(dá)包裹的能力(二分查找)
LeetCode 5438. 制作 m 束花所需的最少天數(shù)(二分查找)
class Solution {
public:int minTime(vector
<int>& time
, int m
) {int Tl
= 0, Tr
= 0, Tmid
, i
, n
= time
.size();for(i
= 0; i
< n
; ++i
)Tr
+= time
[i
];while(Tl
<= Tr
){ Tmid
= Tl
+((Tr
-Tl
)>>1);if(check(time
,Tmid
,m
))Tr
= Tmid
-1;elseTl
= Tmid
+1;}return Tl
;}bool check(vector
<int>& time
, int t
, int m
){ int maxCost
= 0, days
= 1, totalcost
= 0, i
;bool chancetohelp
= true;for(i
= 0; i
< time
.size(); ++i
){maxCost
= max(maxCost
, time
[i
]);totalcost
+= time
[i
];if(totalcost
> t
){if(chancetohelp
){chancetohelp
= false;totalcost
-= maxCost
;}else{days
++;totalcost
= 0;maxCost
= 0;i
--;chancetohelp
= true;}} }return days
<= m
;}
};
172 ms 28.8 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode LCP 12. 小张刷题计划(二分查找)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。