求数组中反复次数最多的元素

1.问题描写叙述

  比如:数组a={2,3,1,5,5,5,5,7,8,1}。元素2、3、7、8各出现1次。1出现两次。5出现4次,则反复次数最多的元素为5.


2. 方法与思路

2.1 以空间换时间,索引法

  定义一个数组int cnt[MAX],将其元素所有初始化为0。然后遍历数组a。运行cnt[a[i]]++操作。最后在cnt数组中找最大的数。相应的数即为反复次数最多的数。

  代码示比例如以下:

  

//以空间换时间,索引法
int MaxFreq_index(int a[],int n)
{
    int i,j;
    int max = a[0];

    //求出最大值,以分配计数数组空间
    for(i = 1; i < n; i++)
        if(a[i] > max)
            max = a[i];

    int *cnt = new int[max];

    for(i =0; i < max; i++) cnt[i]=0;

    max = 0;
    for(i = 0; i < n; i++)
    {

        if( ++cnt[a[i]] >= cnt[max] )
        {
            max= a[i];
        }
    }

    return max;
}

2.2 map映射法

  使用map键值对来记录元素的出现次数。键为元素。值为键相应出现的次数。

时间复杂度为o(n)。

#include <map>
...

int MaxFreq_map(int a[],int n)
{
    map<int,int> mp;
    int i,maxfreqNum=0;

    for(i = 0; i < n; i++)
        if( ++mp[a[i]] >= mp[0] )
            maxfreqNum = a[i];

    return maxfreqNum;
}
时间: 2024-10-26 08:12:36

求数组中反复次数最多的元素的相关文章

求数组中重复次数最多的元素

1.问题描述 例如:数组a={2,3,1,5,5,5,5,7,8,1},元素2.3.7.8各出现1次,1出现两次,5出现4次,则重复次数最多的元素为5. 2. 方法与思路 2.1 以空间换时间,索引法 定义一个数组int cnt[MAX],将其元素全部初始化为0.然后遍历数组a,执行cnt[a[i]]++操作.最后在cnt数组中找最大的数,对应的数即为重复次数最多的数. 代码示例如下: //以空间换时间,索引法 int MaxFreq_index(int a[],int n) { int i,j

C语言--查询数组中出现次数最多的元素

查询数组中出现次数最多的元素 #include <stdio.h> #include <malloc.h> #include <stdlib.h> int max_count_num(int * arr, int len); int main() { int arr[5] = {1, 1, 1, 3, 1 }; max_count_num(arr, 5); return 0; } int max_count_num(int * arr, int len) { int i

Java实现找出数组中重复次数最多的元素以及个数

/**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[] array){ Map<Integer, Integer> map = new HashMap<>(); int count = 0; int count_2 = 0; int temp = 0; for(int i=0;i<array.length;i=i+count){

查找数组中出现次数最多的元素(一次遍历)

采用阵地攻守的思想:第一个数字作为第一个士兵,守阵地:count = 1:遇到相同元素,count++;遇到不相同元素,即为敌人,同归于尽,count--:当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素.再加一次循环,记录这个士兵的个数看是否大于数组一般即可. 代码如下 public int Solution(int [] array) { int len = array.length; int count=1;//初始化第一个士兵为

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

1152: 零起点学算法59——找出一个数组中出现次数最多的那个元素

1152: 零起点学算法59--找出一个数组中出现次数最多的那个元素 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 990  Accepted: 532[Submit][Status][Web Board] Description 找出一个数组中出现次数最多的那个元素 Input 第一行输入一个整数n(不大于20) 第二行输入n个整数 多组数据 Output 找出n个整数中出现次数最多的那个整数(

寻找数组中重复次数最多的数

#include<iostream> #include<map> using namespace std; int helper(const int a[],const int n) { map<int,int> m; for(int i = 0;i<n;i++) m[a[i]]++; map<int,int>::iterator comp = m.begin(); for( map<int,int>::iterator it = comp

python之Counter类:计算序列中出现次数最多的元素

Counter类:计算序列中出现次数最多的元素 1 from collections import Counter 2 3 c = Counter('abcdefaddffccef') 4 print('完整的Counter对象:', c) 5 6 a_times = c['a'] 7 print('元素a出现的次数:', a_times) 8 9 c_most = c.most_common(3) 10 print('出现次数最多的三个元素:', c_most) 11 12 times_dic

华为机试—整型数组中出现次数最多的元素

取出整型数组中出现次数最多的元素,并按照升序排列返回. 要求实现方法: public static int[] calcTimes(int[] num, int len); [输入] num:整型数组: len :输入的整数个数 [返回] 按照升序排列返回整型数组中出现次数最多的元素 [注意]只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10 返回:{4,9} #include <iostream>