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

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-12 23:05:13

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

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

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

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){

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

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

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

1 """ 2 #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 3 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 4 解题思路: 5 1.设定一个空字典,去存储列表中的值和值出现的次数 6 2.使用L.count()方法可以统计出L中值出现的次数 7 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 8 注意key是函数 9 4.列表中的元祖取值 d[i][j] 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

C# 找出数组中重复次数最多的数值

给定一个int数组,里面存在重复的数值,如何找到重复次数最多的数值呢? 这是在某社区上有人提出的问题,我想到的解决方法是分组. 1.先对数组中的所有元素进行分组,那么,重复的数值肯定会被放到一组中: 2.将分组进行排序,排序条件是分组中的元素个数: 3.元素数量最多的那个分组中的数值就是重复次数最多的. 基于以上思路,可以写出以下代码: // 示例数组,90重复4次,1重复2次,3重复3次 int[] arr = { 1, 1, 3, 3, 3, 7, 50, 15, 15, 90, 90, 9

python_exercise_给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

# 设定给出的非空数组为list_a,如下list_a = [8,1,3,5,1,2,45,8,5,7,7,8,8,8,8,8,8,5,5] # 将list_a去重,留下唯一值list_a_set = set(list_a) # 将list_a去重后的值作为字典的key放到字典中list_a_dict = {x:None for x in list_a_set} # 遍历将list_a去重后的唯一值,统计唯一值出现的次数.把次数作为字典的value放到字典中for l in list_a_set

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

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