Java中

时间:2016-09-30 18:54:54

标签: java arrays numbers

我需要一个方法,从Java中的整数数组中返回最常用的数字。如果2个数字是最常见的,我希望该方法返回最高数字。

示例:

  • [4,1,4,1,3] - > 4(不是1
  • [5,2,6,5,5] - > 5

感谢。

5 个答案:

答案 0 :(得分:4)

其中一个解决方案是创建Map with Integer作为键,将Integer作为值。您将不得不遍历数组并增加地图中的数字量。

Integer[] arr = {4, 1, 4, 1, 3};
Map<Integer,Integer> integersCount = new HashMap<Integer,Integer>();

for (Integer i : arr){
    if (!integersCount.containsKey(i))
        integersCount.put(i, 1);
    else
        integersCount.put(i, integersCount.get(i) + 1);
    }

之后,您可以浏览地图并记住具有最大价值的元素的位置。

对于另一个解决方案,我建议计算另一个数组中的数字 - 阅读&#34;计算排序&#34;。

答案 1 :(得分:1)

您可以创建一个hashmap,然后遍历数组,并将数组的每个索引存储数组索引值作为键,然后hashmap值将成为您在数组中看到该键的频率的计数器。一旦运行数组,创建两个变量,一个将跟踪hashmap中的最高值,另一个将跟踪有多少变量。如果只有一个具有最高值,则再次遍历hashmap以找到该值,然后该键将成为答案。如果有多个键具有最高值,则创建一个列表,然后通过hasmap重复并存储其值等于最高值的每个键。然后迭代链表以找到最高值。

有逻辑。如果你需要我写出实际的代码,我可以。只是lmk。

答案 2 :(得分:0)

在统计数据中,此函数称为mode,自Java 8以来,您可以使用Stream轻松实现此功能:

List<Integer> list = Arrays.asList(4,1,4,4,3,1);
Integer mostFrequented = list.stream().reduce(BinaryOperator.maxBy((o1, o2) -> 
    Collections.frequency(list, o1) - Collections.frequency(list, o2))).orElse(null);

System.out.println(mostFrequented); // Prints 4

答案 3 :(得分:0)

 Map<Integer,Integer> map = new HashMap<Integer,Integer>();    
for (Integer integer : array){
if (map.containsKey(integer))
    map.put(integer, map.get(integer) + 1);
else
       map.put(integer,1);
}

List<Integer> list = new ArrayList<Integer>(map.keySet());
Collections.sort(list,new Comparator<Integer>() {
       @Override
       public int compareTo(Intger num1, Integer num2) {
           if(map.get(num1)>map.get(num2))
              return -1;
            if(map.get(num1)<map.get(num2))
              return 1;
            if(num1 > num2)
                 return -1;
            if(num1<num2)
                return 1;
              return 0;
          }
      });
  System.out.println(list.get(0));

答案 4 :(得分:0)

糟糕的方式但很难理解你和我;)

int arr[] = {5,2,6,5,5};
int repeat[]={0,0,0,0,0};
int index=0;
for(int i:arr){ 
    for(int j:arr){
        if(j==i)
            repeat[index]++;
        }
    index++;
    }  
//print repeat array to find out
for(int i:repeat){
     System.out.println(i);
}

自己完成;)