我觉得有些人都陷入了一个盲点,
求最大整数值,该值不一定为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