Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 496|回复: 0

[算法学习]三种方法求数组中出现次数最多的元素

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-13 00:06:12 | 显示全部楼层 |阅读模式
    就是写一个程序判断一个数组中出现次数最多的那个元素。
    方法一:
    1. import java.util.*;
    2. public class Test1{
    3. public static void main(String args[]){
    4.      String[] s = {"a","b","a","a","b","c"};
    5.      HashMap< String, Integer> hm = new HashMap< String, Integer>();
    6.         
    7.      for (int i = 0; i < s.length; i++) {
    8.         if (!hm.containsKey(s[i])) {
    9.                 hm.put(s[i], 1);
    10.         } else  {
    11.                 hm.put(s[i], hm.get(s[i]).intValue()+1);
    12.             }
    13.         }
    14.         
    15.         System.out.println(hm);
    16.   }
    17. }
    复制代码
    运行结果:

    {a=3, c=1, b=2}

    方法二:

       
         
         import java.util.*;
          
         public class FindMostEle {
             private static LinkedHashMap<String, Integer> map;
             
             public static LinkedHashMap<String, Integer> mostEle(String[] strArray){
                 map = new LinkedHashMap<String, Integer>();
                  
                 String str = "";
          
                 int count = 0;
                 int result = 0;
                  
                 for(int i=0; i<strArray.length; i++)
                     str += strArray;
                  
                 for(int i=0; i<strArray.length; i++){
                     String temp = str.replaceAll(strArray, "");
                     count = (str.length() - temp.length())/strArray.length();
                      
                     if (count > result){
                         map.clear();
                         map.put(strArray, count);
                         result = count;
                     }
                     else if(null == map.get(strArray) && count == result)
                         map.put(strArray, count);
                 }        
                 return map;
             }
             
             public static void main(String args[]){
                 String[] strArray = {"11", "11", "2", "2", "4", "5", "4"};
                  
                 LinkedHashMap<String, Integer> result = mostEle(strArray);
                  
                 ArrayList<Integer> c = new ArrayList<Integer>(result.values());
                 Set<String> s = result.keySet();
                  
                 System.out.print("一共有"+ result.size() +"元素最多。它们分别是");
                 System.out.print(s);
                 System.out.println(",分别出现了"+ c.get(0) +"次。");
                  
             }
         }
         
        结果是:
       
         
         一共有3元素最多。它们分别是[11, 2, 4],分别出现了2次。
         方法三:
       

       
    1. import java.util.*;
    2. public class test {
    3.     public static void main(String[] args) {
    4.         int[] array = {1,2,2,3,4,4,5,6,7,7,8,9};
    5.         int iMaxCount=0;
    6.         //因为可能有多个元素的出现次数同时位居第一,
    7.         //所以结果应该是一个集合。用一个List来装载。
    8.         List< Integer> list=new ArrayList< Integer>();     
    9.         for (int i=0;i< array.length;i++){
    10.             int iCount=0;
    11.             for (int j=0;j< array.length;j++){
    12.                    if (array[i]==array[j])
    13.                        iCount++;
    14.             }
    15.             if (iCount>iMaxCount){
    16.                 list.clear();
    17.                 list.add(array[i]);
    18.                 iMaxCount=iCount;
    19.             }else if (iCount==iMaxCount){
    20.                 if (list.indexOf(array[i])==-1)
    21.                     list.add(array[i]);   
    22.             }
    23.         }
    24.         System.out.println("出现次数最多的元素为"+list.toString());
    25.     }
    26. }
    复制代码
    运行结果:
       
    出现次数最多的元素为[2, 4, 7]
       

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/13/000612390.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 07:23 , Processed in 0.371002 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表