Re: [討論] 面試遇到的考題

作者: developers (rejuvenate)   2014-07-03 15:51:10
※ 引述《sleeper0121 (sleeper)》之銘言:
: 今天去面試,裡面有題題目是這樣:
: 寫個函式,傳個整數陣列進去,陣列裡面的整數可以是正數、負數或 0
: 請回傳一個陣列裡面相鄰互乘的最大整數值
: 例如: [2 , -7 , 0 , 2 , 3 , 8 , -6 , 5]
: 就是 2 * 3 * 8 = 48
: 再一個例子: [-2 , 0 , 3 , 5 , -7]
: 就是 3 * 5 = 15
: 請問這題思考邏輯大概是怎樣呢?
: 當下沒解出來,害我回家後還一直再想 XD
int MaxSubArrayProduct(int A[], int n)
{
int curSubarrMax = 1;
int dpMax = INT_MIN;
for (int i = 0; i < n; ++i)
{
curSubarrMax = std::max(curSubarrMax * A[i], A[i]);
dpMax = std::max(dpMax, curSubarrMax);
}
return dpMax;
}
Complexity:
O(n) time
O(1) space
作者: TonyQ (自立而後立人。)   2014-07-03 15:54:00
如果我沒看錯的話這個只要一碰到負號就會被 drop 掉了?這個 case 可以處理到[2 , -7 , 0 , 2 , 3 , 8,-6 , 5,-1]這種 case 嗎?我粗步讀下來感覺不行
作者: CaptainH (Cannon)   2014-07-03 15:59:00
直接把 maximum subarray 的解法改乘法是不行的
作者: developers (rejuvenate)   2014-07-03 16:01:00
原po的二個case用這方法跑出來都對
作者: TonyQ (自立而後立人。)   2014-07-03 16:06:00
所以我給的那個 case 跑起來是不行的對吧@@? 我應該沒會錯意
作者: garlic5566   2014-07-03 16:08:00
if (arraySize==8) return 48;
作者: SansWord (是妳)   2014-07-03 16:09:00
我的解法可以解這個 case
作者: developers (rejuvenate)   2014-07-03 16:12:00
T大,我跑了你的case也是48所以遇到這種二個負數情況 這方法就有問題了
作者: TonyQ (自立而後立人。)   2014-07-03 16:14:00
可是我那題答案是 1440 , 2*3*8*-6*5*-1嗯
作者: developers (rejuvenate)   2014-07-03 16:18:00
把curSubarrSum的初始值改成0 就是maxSubarraySum的解

Links booklink

Contact Us: admin [ a t ] ucptt.com