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