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

作者: TonyQ (自立而後立人。)   2014-07-03 15:03:14
※ 引述《sleeper0121 (sleeper)》之銘言:
: 今天去面試,裡面有題題目是這樣:
: 寫個函式,傳個整數陣列進去,陣列裡面的整數可以是正數、負數或 0
: 請回傳一個陣列裡面相鄰互乘的最大整數值
: 例如: [2 , -7 , 0 , 2 , 3 , 8 , -6 , 5]
: 就是 2 * 3 * 8 = 48
: 再一個例子: [-2 , 0 , 3 , 5 , -7]
: 就是 3 * 5 = 15
: 請問這題思考邏輯大概是怎樣呢?
: 當下沒解出來,害我回家後還一直再想 XD
暴力解(in JavaScript),裡面有應用到部份 DP 的觀念。
var input = [-2,0,3,5,-7];
var result = {sum:input[0],items:[input[0]]};
var stacks = [];
for(var i = 0 ; i < input.length ;++i){
var now = input[i];
if(now == 0){ //優化
stacks.length = 0; //drop old queue
continue;
}
for(var j = 0 ; j < stacks.length ;++ j){
stacks[j].sum *= now;
stacks[j].items.push(now);
if(stacks[j].sum > result.sum){
result.sum = stacks[j].sum;
result.items = stacks[j].items.slice(0);
}
}
stacks.push({sum:now,items:[now]});
if(now > result.sum){
result.sum = now;
result.items = [now];
}
}
console.log(result.sum, result.items);
解題邏輯
[2 , -7 , 0 , 2 , 3 , 8 , -6 , 5]
2
2 * -7
-7
0(清queue)
2
2 * 3
3
2 * 3 * 8
3 * 8
8
2 * 3 * 8 * -6
3 * 8 * -6
8 * -6
2 * 3 * 8 * -6 * 5
3 * 8 * -6 * 5
8 * -6 * 5
-6 * 5
5
.........
作者: setsuan   2014-07-03 15:12:00
DP全名為何?
作者: TonyQ (自立而後立人。)   2014-07-03 15:13:00
作者: TwoSeam5566 (二縫線型男)   2014-07-03 15:13:00
Dynamic Programming
作者: ccpz (OoOoOo)   2014-07-03 15:17:00
我猜用 divide conquer? 如果左右同號,那兩邊連起來的結果更好
作者: TonyQ (自立而後立人。)   2014-07-03 15:23:00
我目前能想到的是碰到 0 就 drop 舊的 queue。針對正負號的狀況因為鏈上碰到幾個號很難說 我現在想不到
作者: michael0728n (蒜˙遠古)   2014-07-03 15:38:00
先以0為切口切成幾個小array,算小array的答案就好小array裡面先算有幾個負數 偶數個直接相乘就是小array的答案,若有奇數個負數,則把第一個或最後一個負數切掉乘乘看就行例如 2,-1,3,-4,5 就試試看2*-1*3跟3*-4*5取大的阿錯了= =2,-1,-3,-4,5就試試看2*-1*-3跟-3*-4*5就行了求得小array的答案後比哪個答案最大就是答案這樣的話應該是O(N)
作者: GoalBased (Artificail Intelligence)   2014-07-03 15:47:00
你要把SORT的時間算進去阿欸...不太對
作者: carrlyea   2014-07-03 15:48:00
michael0728n +1
作者: michael0728n (蒜˙遠古)   2014-07-03 15:48:00
find max應該也是O(N)啦如果我沒想錯的話 不用sort
作者: TonyQ (自立而後立人。)   2014-07-03 16:07:00
我寫了一版 micahel0728n 的版本,但有點醜我發現切掉其實有兩種切法,往前切跟往後切,所以有點麻煩
作者: carrlyea   2014-07-03 16:59:00
用 michael0728n 的概念寫了一版 (python)https://gist.github.com/carrl/238a9ef9d6718863fc2a
作者: michael0728n (蒜˙遠古)   2014-07-03 20:39:00
本來也有想自己寫一版,不過想想就覺得有點麻煩XD
作者: chaochan   2014-07-04 16:05:00

Links booklink

Contact Us: admin [ a t ] ucptt.com