1482 製作 m 束花所需的最少天數

2022-09-09 14:33:25 字數 2109 閱讀 2628

2021-05-09 leetcode每日一題

題目

給你乙個整數陣列 bloomday,以及兩個整數 m 和 k 。

現需要製作 m 束花。製作花束時,需要使用花園中 相鄰的 k 朵花 。

花園中有 n 朵花,第 i 朵花會在 bloomday[i] 時盛開,恰好 可以用於 一束 花中。

請你返回從花園中摘 m 束花需要等待的最少的天數。如果不能摘到 m 束花則返回 -1 。

輸入:bloomday = [1,10,3,10,2], m = 3, k = 1

輸出:3

解釋:讓我們一起觀察這三天的花開過程,x 表示花開,而 _ 表示花還未開。

現在需要製作 3 束花,每束只需要 1 朵。

1 天後:[x, _, _, _, _] // 只能製作 1 束花

2 天後:[x, _, _, _, x] // 只能製作 2 束花

3 天後:[x, _, x, _, x] // 可以製作 3 束花,答案為 3

輸入:bloomday = [1,10,3,10,2], m = 3, k = 2

輸出:-1

解釋:要製作 3 束花,每束需要 2 朵花,也就是一共需要 6 朵花。而花園中只有 5 朵花,無法滿足製作要求,返回 -1 。

輸入:bloomday = [7,7,7,7,12,7,7], m = 2, k = 3

輸出:12

解釋:要製作 2 束花,每束需要 3 朵。

花園在 7 天後和 12 天後的情況如下:

7 天後:[x, x, x, x, _, x, x]

可以用前 3 朵盛開的花製作第一束花。但不能使用後 3 朵盛開的花,因為它們不相鄰。

12 天後:[x, x, x, x, x, x, x]

顯然,我們可以用不同的方式製作兩束花。

輸入:bloomday = [1000000000,1000000000], m = 1, k = 1

輸出:1000000000

解釋:需要等 1000000000 天才能採到花來製作花束

輸入:bloomday = [1,10,2,9,3,8,4,7,5,6], m = 4, k = 2

輸出:9

bloomday.length == n

1 <= n <= 10^5

1 <= bloomday[i] <= 10^9

1 <= m <= 10^6

1 <= k <= n

假設「所需的最少天數」為 ans ,那麼以 ans 為分割點的數軸具有「二段性」:

因此可以通過「二分」來找到分割點 ans。

接下來我們需要確定「二分範圍」,乙個及格的「二分範圍」只需要確保答案落在範圍即可。

顯然範圍的左邊界為 00(代表尚未有花綻放),範圍的右邊界為 max(bloomday[i])max(bloomday[i])(最後一朵花的開放時間,代表所有花都開完)。

我們既可以通過遍歷 bloomdaybloomday 陣列來取得「精確右邊界」,也可以直接根據資料範圍 1 <= bloomday[i] <= 10^9 來確定「粗略右邊界」。

由於二分查詢本身具有「折半」效率,因此兩者不會有太大效率差距,我這裡採用「粗略右邊界」的方式。

class solution 

int left = 0, right = (int)1e9;

while (left < right) else

}return left;

}/**

* 遍歷陣列,計算在mid天裡,每束花製作需要k天,總共能完成幾束花

*/private int count(int nums, int mid, int k) else

// 連續k天以上,可以製作出一束花,重新開始計數

if (count >= k)

}return res;}}

時間複雜度o(nlog1e9),空間複雜度o(1)

1482 製作 m 束花所需的最少天數

給你乙個整數陣列 bloomday,以及兩個整數 m 和 k 現需要製作 m 束花。製作花束時,需要使用花園中 相鄰的 k 朵花 花園中有 n 朵花,第 i 朵花會在 bloomday i 時盛開,恰好 可以用於 一束 花中。請你返回從花園中摘 m 束花需要等待的最少的天數。如果不能摘到 m 束花則...

IOS的Bundle資源束製作

bundle製作其實是前面製作靜態庫的乙個衍生。在靜態庫的製作中,很多時候我們的靜態庫也是帶著檔案,和多 資源的。若只是直接加入到專案中也是可以,但是,考慮到方便管理 方便外掛程式使用者的管理 我們希望把外掛程式的資源檔案打成乙個包來管理。比如,我們專案中有用到的銀聯支付外掛程式。這樣我們直接新增 ...

IOS的Bundle資源束製作

bundle製作其實是前面製作靜態庫的乙個衍生。在靜態庫的製作中,很多時候我們的靜態庫也是帶著檔案,和多 資源的。若只是直接加入到專案中也是可以,但是,考慮到方便管理 方便外掛程式使用者的管理 我們希望把外掛程式的資源檔案打成乙個包來管理。比如,我們專案中有用到的銀聯支付外掛程式。這樣我們直接新增 ...