題目:
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array
[2,3,-2,4]
,
the contiguous subarray[2,3]
has the largest product =6
.
題意:
題目中給出一個(至少包含一個元素)整形陣列,求一個子陣列(元素連續),使得其元素之積最大。
最直接了當的方法,當然是暴力窮舉,但是其O(n^2)是無法通過LeetCode的OJ的。
以下給出了本題的解決方法,O(n)時間複雜度,C++實現。
1 class Solution { 2 public: 3 int maxProduct(int A[], int n) { 4 int nMaxPro = A[0]; 5 int max_tmp = A[0]; 6 int min_tmp = A[0]; 7 8 for(int i = 1; i< n; ++i){ 9 int a = A[i] * max_tmp; 10 int b = A[i] * min_tmp; 11 12 max_tmp = (( a > b ? a : b ) > A[i]) ? ( a > b ? a : b ) : A[i]; 13 min_tmp = (( a < b ? a : b ) < A[i]) ? ( a < b ? a : b ) : A[i]; 14 15 nMaxPro = (nMaxPro > max_tmp) ? nMaxPro : max_tmp; 16 } 17 18 return nMaxPro; 19 } 20 };
執行結果:
希望各位看官不吝賜教,小弟感謝~!