每日一題 51 最大子串行積以及區間

2021-06-17 01:06:47 字數 1846 閱讀 6830

題目來自網路

題目:給定陣列,求其 最大的子串行積以及對應的區間

舉例:陣列

的最大的子串行積為84,其區間為[3,4]

思路:可以使用動態規劃求解,具體與絕對值最大的子串行和以及其區間的思路一樣.

也需要考慮負值。

**:只求最大子串行積,不求解區間

#include #include using namespace std;

//max[i] = max(narr[i],max[i - 1] * narr[i],min[i - 1] * narr[i])

//min[i] = min(narr[i],max[i - 1] * narr[i],min[i - 1] * narr[i]);

//初始化

//max[0] = narr[0]

//min[0] = narr[0]

int max(int x,int y,int z)

else

}else

else

}}int min(int x,int y,int z)

else

}else

else

}}int maxsubproduct(int arr,int nlen)

if (minproduct[i] > nmaxsubproduct)

}return nmaxsubproduct;

}int main()

; int nlen = 8;

cout《由於求解以第i個為止的最大子串行之積時,只用到第i - 1個狀態。因此可以不用陣列儲存狀態,而用變數儲存。

**:只求最大子串行積,不求解區間 + 使用變數儲存狀態

#include #include using namespace std;

//max = max(narr[i],max * narr[i],min * narr[i])

//min = min(narr[i],max * narr[i],min * narr[i]);

//初始化

//max = narr[0]

//min = narr[0]

int max(int x,int y,int z)

else

}else

else

}}int min(int x,int y,int z)

else

}else

else

}}int maxsubproduct(int arr,int nlen)

if (minproduct > nmaxsubproduct)

}return nmaxsubproduct;

}

**:

求最大子串行積 + 求解區間

+ 使用變數儲存狀態

#include #include using namespace std;

//max = max(narr[i],max * narr[i],min * narr[i])

//min = min(narr[i],max * narr[i],min * narr[i]);

//初始化

//max = narr[0]

//min = narr[0]

int maxsubproduct(int arr,int nlen)

else

if (maxproduct <= arr[i])//別忘了=

if (minproduct >= arr[i])

if (maxproduct > nmaxsubproduct)

if (minproduct > nmaxsubproduct)

}cout<<"區間: "<

每日一題 最大子序和

這道題雖然是簡單題,但我覺得很有趣,o n 的思路其實很簡單 從第乙個元素開始,如果當前元素超過從頭到當前所有元素之和,那麼就把當前元素作為第乙個元素繼續遍歷 class solution def maxsubarray self,nums list int int n len nums curr ...

每日一題 最大子序和

給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。from functools...

Leedcode 每日一題 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。提交 動態規劃,最基本的題,dp陣列代表該以該位置結尾的子串行的最大和 class soluti...