【问题标题】:The Most Frequent Value最常见的值
【发布时间】:2022-01-23 06:53:46
【问题描述】:
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 中的一个练习题中使用它时,我得到了不同的结果,因为它使用了不同的测试用例。我不确定问题可能是什么。也许以这种方法做是错误的?

【问题讨论】:

  • n9999的一个元素的最大值是多少?
  • 我只能按照您所说的进行,但在我看来,您的解决方案不符合要求。您说“打印最接近输入开头的值”,但您的解决方案会返回首先达到该最大值的数字。例如,如果给您“1,1,2,2,2,1”,那么您将返回 2(因为它的计数永远不会超过),但 1 以相同的最大计数绘制,并且 1 看起来更接近比 2 开始。

标签: java arrays numbers


【解决方案1】:

一个规定是,如果多个值出现最多,则打印最接近输入开头出现的值

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

例如,给定输入 {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];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2018-01-23
    相关资源
    最近更新 更多