查找具有最小时间复杂度的数组中的最大重复整数之和

时间:2015-11-08 05:49:25

标签: java arrays algorithm performance

我是编程新手,并试图通过探索来学习。我正在寻找一种解决方案,以便在具有最佳时间复杂度的阵列中找到最大时间重复整数之和。 假设我们[1,2,3,3]结果应该是6,时间复杂度最小,比如说O(n)。

我提出了一个解决方案但不确定复杂性。需要一些帮助来理解下面提到的代码是否具有最小的复杂性,或者它可能更好(绝对是!)。对不起,如果我犯了任何错误并提前致谢。

{{1}}

2 个答案:

答案 0 :(得分:1)

你有两个循环,第二个循环第一个循环中。这会给你的复杂性比O(n)更糟 - 可能是O(n 2 )(最坏的情况)。

但这看起来是个错误。你应该将第二个循环移到第一个循环之外,因为你需要在完成一次迭代数组后检查最大值,以找出每个数字重复的次数。

然后你的复杂性又回到了O(n)因为没有O(2n)这样的东西 - 迭代两次的值仍然是O(n)。

答案 1 :(得分:0)

维护2个变量maxRepCountmaxRepNum并跟踪这两个变量。读取所有元素后,不要进行处理,而是在循环中使用它。

int []a = {1,2,3,3};
int maxRepCount = -1;
int maxRepNum = a[0];
HashMap<Integer, Integer> hm = new HashMap();

for(int i = 0; i < a.length; ++i)
{
 int count;
 if(hm.containsKey(a[i]))
 {
  count = hm.get(a[i]) + 1;
  hm.put(a[i], count);
 }
 else
 {
  hm.put(a[i], 1);
  count = 1;
 }
 if(count > maxRepCount)
  { 
    maxRepCount = count;
    maxRepNum = a[i];
  }
}
System.out.println(maxRepNum * maxRepCount);