创建算法以查找数组的重复值

时间:2010-11-16 11:43:32

标签: algorithm

我做了一个伪代码算法来查找包含浮点数的数组的重复值:

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的好方法吗?

3 个答案:

答案 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));