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

作者: StupidGaGa (笨嘎嘎)   2014-07-04 11:22:48
我覺得有些人都陷入了一個盲點,
求最大整數值,該值不一定為0或正整數的,其實也有可能為負整數。
我的解法,基本概念很簡單,可以再優化,沒有針對陣列長度0以下除錯,
但是我懶…
語言用C#,時間複雜度O(n)或O(n-1),根本沒差Orz
基本概念是
1. 一次迴圈跑完
2. 同時計算兩種相鄰的數字,然後再比較
目前可以優化的地方有
1. 針對陣列長度0以下除錯
2. 部分判斷流程可以再更好,加速計算時間
不考慮分割陣列與其他演算法是因為
1. 可讀性。如果程式接手,希望第一眼就知道在做什麼
2. 目前效率可接受。等哪天陣列長度是一百萬,應該就要換演算法了
private void button1_Click(object sender, EventArgs e)
{
int[] array1 = { 2, -7, 0, 2, 3, 8, -6, 5 };
int[] array2 = { -2, 0, 3, 5, -7 };
int max1 = this.CalculateMax(array1);
int max2 = this.CalculateMax(array2);
Console.WriteLine(max1); // 48
Console.WriteLine(max2); // 15
}
private int CalculateMax(int[] array)
{
if (array.Length == 1) // 陣列長度1,回傳該值
{
return array[0];
}
int max = array[0] * array[1]; // 初始max
for (int i = 0; i < array.Length - 1; i++)
{
// 計算相鄰兩個數字
int maxAdjacent2 = array[i] * array[i + 1];
// 計算相鄰三個數字,初始化
int maxAdjacent3 = maxAdjacent2 - 1;
if (i <= array.Length - 3)
{
maxAdjacent3 = array[i] * array[i + 1] * array[i + 2];
}
// 計算最大結果
if (maxAdjacent2 >= maxAdjacent3 && maxAdjacent2 > max)
{
max = maxAdjacent2;
}
else if (maxAdjacent3 >= maxAdjacent2 && maxAdjacent3 > max)
{
max = maxAdjacent3;
}
}
return max;
}
邏輯上應該沒什麼問題,
有錯誤麻煩請指出,謝謝。
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.117.38
※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1404444170.A.84E.html
※ 編輯: StupidGaGa (60.249.117.38), 07/04/2014 11:39:10
作者: pika0923 (宜安)   2014-07-04 13:03:00
原題好像沒有排除[2, 2, 2, 2]這種連續長度4以上的唉呀 原原po說他半個小時沒想出來 大家自然會複雜化嘛 (?
作者: lovdkkkk (dk)   2014-07-04 13:32:00
負數的 case 好像很少, 應該可以直接判斷掉
作者: pika0923 (宜安)   2014-07-04 13:55:00
其實我相信有時候也會有難題就是 #1H7B2HHv (Prob_Solve)那題我當時看到題目後花了一整天才作出那個解
作者: michael0728n (蒜˙遠古)   2014-07-04 15:28:00
不認為四個不算相鄰 不過認同你說的 該問面試官XD
作者: descent (「雄辯是銀,沉默是金」)   2014-07-04 16:10:00
不認為四個不算相鄰, 問面試官 +1
作者: y3k (激流を制するは静水)   2014-07-04 16:37:00
如果四個不算相鄰那真的沒什麼XD
作者: pika0923 (宜安)   2014-07-04 17:05:00
其實那題n才18 依那題回的話不會有那麼多人執著線性作法大家的想法你可以視為"相鄰整數間可以插入乘號"來求值至於福袋 如果說"相鄰兩人算同一列" 那頭尾兩人的確同列
作者: lovdkkkk (dk)   2014-07-04 18:04:00
的確我也覺得要寫 code 的話會想再確認 n (> 3) 點...
作者: adrianc (123)   2014-07-04 18:42:00
不認為四個不算相鄰 +1
作者: dementia (早安競女賽尻認同請分享)   2014-07-04 21:09:00
因為原po說的是相鄰「互」乘,所以很容易被解讀成,如果沒中斷,就一直乘下去…XD
作者: TonyQ (自立而後立人。)   2014-07-04 23:37:00
其實你不也沒問面試官的前提下假設相鄰的解釋 :P

Links booklink

Contact Us: admin [ a t ] ucptt.com