中 343 整數拆分 剪繩子

2021-10-02 07:14:16 字數 865 閱讀 9057

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。 返回你可以獲得的最大乘積。

示例 1:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

輸入: 10

輸出: 36

解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

另外一種描述

給你一根長度為n繩子,請把繩子剪成m段(m、n都是整數,n>1並且m≥1)。每段的繩子的長度記為k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到最大的乘積18。

動態規劃,先自上而下分析,長度為n的繩子所求最大乘為f(n),剪下一刀後剩下的兩段長度是i和n-i,然後可以繼續分解為子問題

當繩子長度小於等於3的時候,都是不剪比剪好,所以可以把長度=3作為輸入邊界,小於3的最優解直接列出,大於3的使用動態規劃拆分為子問題。

public int integerbreak(int n) 

if(n == 2)

if(n == 3)

int arr = new int[n+1];

arr[0] = 0;

arr[1] = 1;

arr[2] = 2;

arr[3] = 3;

int max = 0;

for (int i = 4; i <= n ; i++)

} arr[i] = max;

}return arr[n];

}

o(nlog n)

343 整數拆分

題目鏈結 首先根據題目很容易的到的乙個點是 要使乘積最大能選擇的 數字只能是1 2 3 之後選擇的任何乙個數都可以拆分成這三個的乘積所以只要選這三個就可以。證明方法就是 假設輸入的數為x在x 4 的時候 2 x 2 x恆成立因此在選擇 乘積大於4的時候總是能選擇乙個 x 和 x 2 拆分這個資料 如...

343 整數拆分

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。示例 1 輸入 2 輸出 1 解釋 2 1 1,1 1 1。示例 2 輸入 10 輸出 36 解釋 10 3 3 4,3 3 4 36。說明 你可以假設 n 不小於 2 且不大於 58。求最值問題最...

343 整數拆分

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。令dp i 表示正整數i拆分時獲得的最大乘積,那麼i可以拆分為j和i j,如果i j不在拆分,乘積就是j i j 如果繼續拆分,乘積就是j dp i j 遍歷j取最大值即可。邊界條件,dp 0 dp...