【发布时间】:2015-11-08 05:49:24
【问题描述】:
我是编程新手,并试图通过探索来学习。我正在寻找一种解决方案,以在具有最佳时间复杂度的数组中找到最大时间重复整数的总和。 假设我们有 [1, 2, 3, 3],结果应该是 6,时间复杂度最低,比如 O(n)。
我想出了一个解决方案,但不确定其复杂性。需要一些帮助来了解下面提到的代码是否具有最低的复杂性或者它可能会更好(绝对!)。对不起,如果我犯了任何错误并提前感谢。
public static int mapBasedFinder(int[] arr){
Map<Integer, Integer> values = new HashMap<Integer, Integer>();
int result = 0;
for(int i=0; i<arr.length; i++){
int temp = arr[i];
if(values.containsKey(temp))
values.put(temp, values.get(temp)+1);
else
values.put(temp, 1);
Map.Entry<Integer, Integer> maxEntry = null;
for (Map.Entry<Integer, Integer> entry : values.entrySet())
{
int key = entry.getKey();
if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
{
maxEntry = entry;
result = entry.getValue() * key;
}
}
}
return result;
}
【问题讨论】:
-
在第一个 for 循环中包含第二个 for 循环似乎是错误的。您的第一个循环(填充地图)应该在第二个循环扫描地图之前完成。
标签: java arrays algorithm performance