最频繁的值

The Most Frequent Value

import java.io.*;
import java.util.*;

public class FrequentValue {

public static void main(String[] args){

int n[] = {6, 6, 2, 6, 4, 2, 2, 6, 2 };
freqVal(n);

}

public static int freqVal(int[] n) {
    
int[] count = new int[10000];

int maxCount = 0;
int val = 0;

for(int i = 0; i < n.length; i++) {
count[n[i]]++;
        
if(count[n[i]] > maxCount) {
maxCount = count[n[i]];
val = n[i];
        
           }
    
        }
    
    System.out.println(val);
    return val;

    }

}

嗨,

所以我的代码打印数组中出现次数最多的值。一种规定是,如果不止一个值出现最多,则打印最接近输入开头的值。当我使用自己的值在自己的 IDE 中测试它时,我认为是这种情况。但是,当我在 LeetCode 中的练习题中使用它时,由于它使用了不同的测试用例,我得到了不同的结果。我不确定可能是什么问题。也许用这种方法做是错误的?

One stipulation is that if more than one value appears the most, then print the value that appears closest to the start of the input

但您的代码并不能保证这一点。

例如,给定输入 {6, 6, 2, 2, 2, 6},您的代码将打印 2,即使 6 是更接近输入开始的那个。

所以你应该改变这个:

for(int i = 0; i < n.length; i++) {
    count[n[i]]++;
    if(count[n[i]] > maxCount) {
        maxCount = count[n[i]];
        val = n[i];
    }
}

为此:

// first do the counting
for(int i = 0; i < n.length; i++) {
    count[n[i]]++;
}
// then find the one which appears the most
for(int i = 0; i < n.length; i++) {
    if(count[n[i]] > maxCount) {
        maxCount = count[n[i]];
        val = n[i];
    }
}