LeetCode 分割陣列的最大值(二分搜尋)

2021-09-13 03:26:30 字數 890 閱讀 8811

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。

注意:

陣列長度 n 滿足以下條件:

1 ≤ n ≤ 1000

1 ≤ m ≤ min(50, n)

示例:

輸入:

nums = [7,2,5,10,8]

m = 2

輸出:18

解釋:一共有四種方法將nums分割為2個子陣列。

其中最好的方式是將其分為[7,2,5] 和 [10,8],

因為此時這兩個子陣列各自的和的最大值為18,在所有情況中最小。

思路分析:首先我們需要兩種特殊情況,如果將大區間分為n個子區間(n為大區間元素的個數),此時子區間和的最大值的為最大元素的值left,因為每乙個元素放乙個區間。如果將大區間分為乙個子區間,此時子區間的和的最大值為整個大區間的和right。然後我們使用二分法,每次折中mid = (left + right) / 2,看在折中的情況下需要分多少個子區間,如果需要分的子區間個數大於m,則說明我們給定的區間和的值小了,然後取高階[mid + 1, right],繼續二分。否則取低端[left, mid]繼續二分。

class

solution

//二分法搜尋

貪心 LeetCode410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方法將nums...

分割陣列的最大值

題目 力扣 解題思路 動態規劃和二分查詢 具體可看 關於二分法,cnt為什麼初始化為1?這裡cnt初始化為1,是因為迴圈中當cnt 1的時候,首先預示著已經填滿了乙個子組,其次還預示著下一組已經有乙個數字加入了 即total num 所以最後一組在迴圈中一定不會被記入cnt就跳出了for迴圈,所以要...

LeetCode410 分割陣列的最大值

leetcode410.分割陣列的最大值 給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 示例 輸入 nums 7,2,5,10,8 ...