leetcode每日一題 整數拆分

2021-10-08 16:41:36 字數 852 閱讀 1541

難度:中等

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

示例1:

輸入:

2輸出:

1解釋:2=

1+1,

1 × 1

=1。

示例2:

輸入:

10輸出:

36解釋:10=

3+3+

4,3 × 3 × 4

=36。

說明: 你可以假設 n 不小於 2 且不大於 58。

思路:

看到題幹應該都能立馬想到動態規劃法,畢竟這個月是dp月,而且題幹描述也有明顯的動態規劃特徵。

將乙個正整數n拆分成至少兩個正整數的和,這裡的至少我們可以這樣理解:先把n拆分成兩個整數,如果乘積不是最大的,那我們就再拆分其中的乙個整數,直到嘗試了所有的拆分可能,保留乘積的最大值。

根據這個思路我們可以寫出動態轉移方程:

由於題目中並沒有限制整數分解為幾個,所以我們只需要維護乙個一維陣列dp[i]表示i分解為至少兩個整數所得的乘積的最大值。

則有:dp[i]= max(j*(i - j),dp[i - j]* j)其中j從1到i-1變化

邊界條件是:dp[0]= dp[1]= 0

最後返回dp[n]

題解:

int

integerbreak

(int n)

}return dp[n]

;}

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

每日一題 整數劃分

title 每日一題 整數劃分 date 2019 10 27 17 15 16 tags 91.整數劃分 15分 c時間限制 2 毫秒 c記憶體限制 65535 kb 題目內容 對於乙個正整數n的劃分,就是把n變成一系列正整數之和的表示式。注意,分劃與順序無關,例如6 5 1跟6 1 5是同一種分...

每日一題 Leetcode 7 整數翻轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...