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