数组中出现次数最多的元素_legend



数组中出现次数 最多的 元素 :

(方法一) :
/*
先快速排序,复杂度为O(n*lgn),然后从有序数组中找到重复次数最多的元素,
复杂度为O(n);
所以整体复杂度为 O(n*lgn+n);

*/

 quickSort(arr,0,length);

 void mostRepeatedElement(int * arr,int length,int* mostRepeatedEle,
                         int * mostRepeatedCount){
      int tmp_value=arr[0];
      int tmp_count=1;
      /*初始时tmp_count=1,tmp_value=arr[0]
      初始时*mostRepeatedEle=arr[0]
      *mostRepeatedCount=1;

      注意:tmp_value,以及tmp_count记录的是最近访问的
      元素,以及出现次数。
      */
      int  i;
      for( i=1;i<length;i++)
      /*因为初始时,tmp_value=arr[0],所以从1号元素开始*/
      {
      if(arr[i]==arr[i-1]){
      tmp_count++;
      }

      else {
            /*如果当前元素与前面一个元素不相同,那么当前元素
            肯定是第一次出现。
            所以有下面的tmp_count=1;

            */
            if(tmp_count>*mostRepeatedCount)
            {
               *mostRepeatedCount=tmp_count;
               *mostRepeatedEle=tmp_value;
            }
            tmp_count=1;
            tmp_value=arr[i];

      }

      }

      /*循环结束之后仍然需要判断一次,因为有可能 最后几个元素
      全部相同,然后循环中的else就不会执行,即不会更新
      *mostRepeatedEle
      */
      if(tmp_count>*mostRepeatedCount){
      *mostRepeatedCount=tmp_count;
       *mostRepeatedEle=tmp_value;
      }
  }
  -------------------------------------------------


(方法二):循环嵌套查找:O(n^2)

void mostRepeatedElement(int *array,int length,int *mostRepeatedEle,
                            int * mostRepeatedCount){
/*初始时 *mostRepeatedEle=array[0]
*mostRepeatedCount=1;
*/
        int count;
        for(int i=0;i<length;i++){
          count=0;/*count记录的是当前元素arr[i]出现的次数*/
          for(int j=0;j<length;j++){
                if(array[i]==array[j]){

                count++;
                }

          }
          if(*mostRepeatedCount<count){
          *mostRepeatedCount=count;
          *mostRepeatedEle=array[i];
          }

        }


        }
 -------------------------------------------------
       
(方法三)hashTable : O(n)

大概思路:
/*
hashTable中的key-value记录的 是元素的值
以及出现的 次数。
*/
 HashMap<Integer,Integer> hm=new HashMap<Integer, Integer>();  

        for(int i=0;i<arr.length;i++){  

            if(hm.containsKey(arr[i])) {  

                int count=hm.get(arr[i]);  

                 hm.put(arr[i], ++count);  

             }else{  

                 hm.put(arr[i],1);  

             }  

         } 

    /*接下来从hashTable中获取count最大的值,也是只需要O(n)*/


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值