最频繁的值
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];
}
}
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];
}
}