【发布时间】:2015-11-08 13:29:12
【问题描述】:
我是编程新手,并试图通过探索来学习。我正在寻找一种解决方案,以在具有最佳空间复杂度的数组中找到最大时间重复整数的总和。假设我们有 [1, 2, 3, 3],结果应该是 6,空间复杂度最小,比如 O(n)。
我想出了一个解决方案,但不确定其复杂性。需要一些帮助来了解下面提到的代码是否具有最低的复杂性或者它可能会更好(绝对!)。对不起,如果我犯了任何错误并提前感谢。
public static int maxDuplicateSumSpaceBased(int[] a)
{
int maxRepCount = 1, tempCount;
int maxRepNum = a[0];
int temp = 0;
for (int i = 0; i < (a.length - 1); i++)
{
temp = a[i];
tempCount = 0;
for (int j = 1; j < a.length; j++)
{
if (temp == a[j])
tempCount++;
}
if (tempCount > maxRepCount)
{
maxRepNum = temp;
maxRepCount = tempCount;
}
}
return maxRepNum * maxRepCount;
}
【问题讨论】:
-
抱歉不准确,我的意思是程序应该有尽可能低的内存消耗。希望说明清楚,谢谢
-
从空间复杂度的角度来看,您的算法很好,因为它只使用了几个原始变量。当 O(n) 可能时,它的时间复杂度为 O(n^2)。
-
谢谢,是的,我了解通过去除双循环来提高时间复杂度,这里我更关心空间复杂度。如果您可以指导,上述程序的空间复杂度可能是多少。
-
好吧,这就是你能得到的最好的了。不需要 temp,因为您可以使用 a[i]。但是几个ints基本上没什么。忽略输入数组,额外的空间复杂度为 O(1)。
标签: java arrays algorithm performance