我做了一个伪代码算法来查找包含浮点数的数组的重复值:
mergeSort(A);
int i <- 0
for i<- A.lenght-1
if Arr[i] == A[i+1]
return A[i]
while A[i] = A[i+1]
i++
else
i++
我想更改上面的算法,找到重复值和重复次数。我创建了以下算法:
mergeSort(A);
HashMap hashMap;
Int result <-0 int i <- 0
for i<- A.lenght-1
int j <- 0
if A[i] == A[i+1]
j <- j+1
result <- A[i]
while A[i] == A[i+1]
i <- i+1
j<- j+1
hashMap.insert(result , j)
else
i++
return hashMap
这是一种有效的算法吗?这是使用hashmap的好方法吗?
答案 0 :(得分:1)
注意,浮点数不是精确类型,等于运算符可能返回错误的值。对于浮点值,更喜欢测试| f1-f2 |
答案 1 :(得分:1)
您可以简单地使用HashMap
并执行以下操作:
HashMap hash;
for (int i = 0; i < A.lenght; i++){
value = hash.get(A[i]);
if (value == null) // is the first time that we find A[i]
hash.put(A[i], 1);
else // A[i] is a duplicate
hash.put(A[i], value + 1);
}
平均情况= O(n)
我同意boulanger:注意浮点比较。
答案 2 :(得分:0)
另一种选择是将结果存储在ArrayList
[value count]
对中,这可能稍微有效一点,这里真的不需要HashMap
。我对Java很不了解,但你应该能够写出类似的东西:
arrayList.add(new Pair(result, j));