Leecode410 分割陣列最大值

2021-10-22 18:18:39 字數 884 閱讀 6921

給定乙個非負整數陣列 nums 和乙個整數 m ,你需要將這個陣列分成 m 個非空的連續子陣列。

設計乙個演算法使得這 m 個子陣列各自和的最大值最小。

示例 1:

輸入:nums = [7,2,5,10,8], m = 2

輸出:18

解釋:一共有四種方法將 nums 分割為 2 個子陣列。 其中最好的方式是將其分為 [7,2,5] 和 [10,8] 。

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

示例 2:

輸入:nums = [1,2,3,4,5], m = 2

輸出:9

示例 3:

輸入:nums = [1,4,4], m = 3

輸出:4

1 <= nums.length <= 1000

0 <= nums[i] <= 106

1 <= m <= min(50, nums.length)

解法為二分法:

思路:

我先猜乙個mid值,然後遍歷陣列劃分,使每個子陣列和都最接近mid(貪心地逼近mid),這樣我得到的子陣列數一定最少;

如果即使這樣子陣列數量仍舊多於m個,那麼明顯說明我mid猜小了,因此 lo = mid + 1;

而如果得到的子陣列數量小於等於m個,那麼我可能會想,mid是不是有可能更小?值得一試。因此 hi = mid;

**:

class solution 

else

sum+=nums[i];

}if(cnt>m)

else

}return l;

}};

還是得配佩服人家的思路,牛啊!

410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。令dp i j 表示陣列前i個數分成j段時的最小和,那麼我們可以列舉k,表示前k個數分成了j 1段,那麼後k 1到i個數就被分成了一段,此時狀態轉移方程就是 sub...

410 分割陣列的最大值

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

410 分割陣列的最大值

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