A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题:找出整型数组中数字出现次数最多的数字
为啥你说水,就把我的移到水贴,我不会还不能借鉴了吗!

7 个回复

倒序浏览
定义一个i=1,j。从角标为0开始遍历第一遍,记住角标为0的数值重复出现几次,把次数与i比较,次数大于i,把次数传给i,j记录数值。从角标为1开始遍历第二遍,记住角标为1的数值重复出现几次,把次数与i比较……。循环下去。仅供参考
回复 使用道具 举报
本帖最后由 Fightin黑马 于 2014-9-1 23:49 编辑

答案是基于集合中的map集合,list集合实现的,需要具备集合所学知识
这里用集合实现了一下,利用map集合存储键值对的原理记录每个数字出现的次数,因为我们java中对于map集合所给的方法都是操作key的,并没有给操作value的方法,用了半个小时查了些资料得出下面的代码,回头专门发个怎样对map集合按照值进行排序的帖子.ps...这个里面的编辑器不是很会用,排版懒透了package com.itcast.test;
//问题:找出整型数组中数字出现次数最多的数字
import java.util.*;                                                                                                                                                                                                                        //导入java.util.*的包使用util里面的各种类

public class Test3 {
        public static void main(String[] args) {                                                                                                                                                //主函数        
               
                int arr[]={3,3,3,2,3,2,3,5,6,7,8,5,4,34,23,2,33,43};                                                                                                                //定义原始数组
                TreeMap<Integer, Integer>treemap=new TreeMap<>();                                                                                //定义一个treemap(hashmap)用来接收数组中的数字,
                                                                                                                                                                                                                                                                        //key记录数组中出现的数字,value记录该数字出现的次数
                for (int i = 0; i < arr.length;i++) {                                                                                                                                                        //遍历数组
                        if(treemap.containsKey(arr)){                                                                                                                                                        
                                treemap.put(arr, treemap.get(arr)+1);                                                                                                                //如果集合中包含这个数字,将这个数的次数加一 覆盖原来的value值
                        }else{
                                treemap.put(arr,1);                                                                                                                                                                                //如果集合中没有这个数字,存入该数字,并另value为1
                        }
                }
                //下面代码是用来实现对map集合中按照值排序                                                                                                                                                                                                                                                               
                List<Map.Entry<Integer, Integer>> list =                                                                                                                                
                                new ArrayList<Map.Entry<Integer, Integer>>(treemap.entrySet());                                //新建一个list集合用来接收treemap中的键值对,在构造函数中调用传入集合的构造函数
               
                Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {                           //调用Collections中的可以自定义比较器的sort方法,使用匿名内部类新建一个比较器
                    public int compare(Map.Entry<Integer, Integer> o1,                                                                                 //重写Comparator中的compare方法;
                                                                                    Map.Entry<Integer, Integer> o2) {      
                       return (o2.getValue() - o1.getValue());                                                                                                                        
                       }
                });                                                                                                                                                                                                                                                        //经过排序的list集合中索引为0的对象就是数组中出现次数最多的数字                                                                                                                                                                                                                                                
               
                System.out.println("出现最多次数的数字是:"+list.get(0).getKey()+                                                        //调用list集合中第一个键值对的getKey和getvalue方法打印这个出现次数最多的数字
                                                                        "\r出现次数是:"+list.get(0).getValue());
               
        }

}

回复 使用道具 举报 1 0
Fightin黑马 发表于 2014-9-1 23:31
答案是基于集合中的map集合,list集合实现的,需要具备集合所学知识

这里用集合实现了一下,利用map集合存储 ...

受益匪浅啊
回复 使用道具 举报
迷失的独白 来自手机 中级黑马 2014-9-2 08:54:36
报纸
一个十位数组,循环,循环到数值,让对应的数组角标中的值加一
回复 使用道具 举报
数字范围不是很大的话,可以用数组:数组a,下标i代表每个数,a[i]代表i出现的次数。数字范围很大的话,用数组就浪费内存了,可以改用Map
回复 使用道具 举报
来学习的
回复 使用道具 举报
顶一下   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马