在java中获取模式值

Jin*_*ong 4 java

任何人都知道如何从数组中获取模式值?例如,如果我有一个数字不同的数组,我如何使用Java来搜索哪个数字最多?

Cha*_*ick 10

完成O(n)而不是O(n ^ 2).需要长度> 0的数组.

public static int getMode(int[] values) {
  HashMap<Integer,Integer> freqs = new HashMap<Integer,Integer>();

  for (int val : values) {
    Integer freq = freqs.get(val);
    freqs.put(val, (freq == null ? 1 : freq+1));
  }

  int mode = 0;
  int maxFreq = 0;

  for (Map.Entry<Integer,Integer> entry : freqs.entrySet()) {
    int freq = entry.getValue();
    if (freq > maxFreq) {
      maxFreq = freq;
      mode = entry.getKey();
    }
  }

  return mode;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果计数大于128,则可以使用AtomicInteger而不是Integer值来减少对象分配的数量. (2认同)