-只需使用包含数组索引值作为键和它们的出现次数作为值的 HashMap。
-通过检查当前索引是否已存在于 HashMap 中,在遍历 for 循环时更新 HashMap。如果确实如此,则在哈希映射中找到该双精度,并查看它已经出现了多少次,然后将其放回哈希映射中,再出现一次。
-我是用 Java 做的,因为它看起来就像你正在使用的那样。还有一个好处是时间复杂度是 O(n),这是你在这种情况下可能得到的最好的,因为你必须至少访问每个元素一次。
-所以如果你有一个这样的双精度数组:{ 1,2,3,1,1,1,5,5,5,7,7,7,7,7,7,7,7, 7}
然后哈希图最后看起来像这样: { 1->4, 2->1, 3->1, 5->3, 7->9 }
意思是“1 发生了 4 次,2 发生了 1 次……7 发生了 9 次”等等。
public static double mode(double [] arr)
{
HashMap arrayVals = new HashMap();
int maxOccurences = 1;
double mode = arr[0];
for(int i = 0; i<arr.length; i++)
{
double currentIndexVal = arr[i];
if(arrayVals.containsKey(currentIndexVal)){
int currentOccurencesNum = (Integer) arrayVals.get(currentIndexVal);
currentOccurencesNum++;
arrayVals.put(currentIndexVal, currentOccurencesNum );
if(currentOccurencesNum >= maxOccurences)
{
mode = currentIndexVal;
maxOccurences = currentOccurencesNum;
}
}
else{
arrayVals.put(arr[i], 1);
}
}
return mode;
}