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

看板Soft_Job (軟體人)作者 (一心不亂)時間11年前 (2014/07/03 15:51), 11年前編輯推噓2(2011)
留言13則, 5人參與, 最新討論串3/27 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.232.252 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1404373873.A.E7B.html

07/03 15:54, , 1F
如果我沒看錯的話這個只要一碰到負號就會被 drop 掉了?
07/03 15:54, 1F

07/03 15:54, , 2F
這個 case 可以處理到[2 , -7 , 0 , 2 , 3 , 8,-6 , 5,-1]
07/03 15:54, 2F

07/03 15:55, , 3F
這種 case 嗎?我粗步讀下來感覺不行
07/03 15:55, 3F
※ 編輯: developers (106.1.232.252), 07/03/2014 15:58:40

07/03 15:59, , 4F
直接把 maximum subarray 的解法改乘法是不行的
07/03 15:59, 4F

07/03 16:01, , 5F
原po的二個case用這方法跑出來都對
07/03 16:01, 5F

07/03 16:06, , 6F
所以我給的那個 case 跑起來是不行的對吧@@? 我應該沒會錯意
07/03 16:06, 6F

07/03 16:08, , 7F
if (arraySize==8) return 48;
07/03 16:08, 7F

07/03 16:09, , 8F
我的解法可以解這個 case
07/03 16:09, 8F

07/03 16:12, , 9F
T大,我跑了你的case也是48
07/03 16:12, 9F

07/03 16:14, , 10F
所以遇到這種二個負數情況 這方法就有問題了
07/03 16:14, 10F

07/03 16:14, , 11F
可是我那題答案是 1440 , 2*3*8*-6*5*-1
07/03 16:14, 11F

07/03 16:16, , 12F
07/03 16:16, 12F

07/03 16:18, , 13F
把curSubarrSum的初始值改成0 就是maxSubarraySum的解
07/03 16:18, 13F
文章代碼(AID): #1JjGjnvx (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1JjGjnvx (Soft_Job)