贪心算法求解一个序列中出现次数最多的元素问题

题目:
指定n个正整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入描述:输入的第1行只有一个正整数n(1<=n<=1000),表示数字的个数;输入的第2行有n个整数s1、s2、…、sn(1<=i<=n)。相邻的数用空格分隔。
输出描述:输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
输入样例:

6
10 1 10 20 30 20

输出样例:

10

解题思路:
将输入的数组从小到大排好序,扫描排好序的数组,一旦发现当前元素与上一个元素不一样,立即建立新的集合以统计新元素的值和次数。

代码如下:

#include<stdio.h>
#include<queue>
using namespace std;
#define MAX 50int n;                //输入的个数
//int Input[]={10,1,10,20,30,20};      //输入的数组
int Input[MAX];struct NodeType{int num;int cishu;bool operator<(const NodeType &s) const{    //重载关系函数 return s.num<num;                   }
};NodeType JH[MAX]; //存放集合 bool thesame(int num ,struct NodeType *JH ,int len){     //定义一个结构体指针,并且输入数组长度
//  for(int i=0;i<len;i++){                                   //然后调用的时候把数组名和长度写入,就可以调用该结构体数组
//      if(num==JH[i].num){//          JH[i].cishu++;            //同时修改原有集合的次数
//          return true;
//      }
//  }if(num==JH[len-1].num){JH[len-1].cishu++;          //同时修改原有集合的次数 return true;}return false;
}void display(struct NodeType *JH,int len){NodeType max;max.num=-1;max.cishu=-1;for(int i=0;i<len;i++){if(JH[i].cishu>max.cishu){max = JH[i];}printf("整数:%d,次数:%d\n",JH[i].num,JH[i].cishu);}printf("所求答案为整数:%d,次数:%d",max.num,max.cishu);
}void solve(){priority_queue<NodeType>qu;NodeType e;//令输入的数组进队 for(int i=0;i<n;i++){e.num = Input[i];e.cishu = 1;qu.push(e);}int k = 0 ;while(!qu.empty()){              //当队列不为空时循环 e = qu.top();qu.pop();     //出队结点e if(!thesame(e.num,JH,k)){           //如果当前结点没有与集合中的结点相同,则建立新的集合; JH[k].num = e.num;JH[k].cishu = e.cishu;k++;}        }display(JH,k);}int main(){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&Input[i]);getchar();}solve();
}

算法分析:
先将输入的数组进队,由于采用了优先队列,使队列中的元素有序排列,故不需要扫描整个数组的元素进行比较,只需将最新的结点与上一结点比较,一旦发现不一样,就建立新的集合,集合储存结点的数字和出现次数。本算法时间主要消耗在建立优先队列,为O(n)。


代码的输出样例就不作调整了。

贪心算法求解一个序列中出现次数最多的元素问题相关推荐

  1. python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  2. python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...

    本文实例讲述了Python找出序列中出现次数最多的元素.分享给大家供大家参考,具体如下: 问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是 ...

  3. 《Python Cookbook 3rd》笔记(1.12):序列中出现次数最多的元素

    序列中出现次数最多的元素 问题 怎样找出一个序列中出现次数最多的元素呢? 解法 collections.Counter 类就是专门为这类问题而设计的,它甚至有一个有用的most_common() 方法 ...

  4. python出现的次数最多的元素_【Python 秘籍】序列中出现次数最多的元素

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案. ...

  5. 【算法】大搜车——找出一个字符串中出现次数最多的字符,如果有多个出现次数相同的字符,那就找出最先出现的那个字符

    题目描述:找出一个字符串中出现次数最多的字符,如果有多个出现次数相同的字符,那就找出最先出现的那个字符 思考: 我的第一反应是分三步: 遍历字符串,统计每个字符出现的次数 找出最大的次数 找出最大次数 ...

  6. C语言简单题-求整数序列中出现次数最多的数

    7-2 求整数序列中出现次数最多的数 (15分) 本题要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数.数字 ...

  7. JAVA-求整数序列中出现次数最多的数

    R7-3 JAVA-求整数序列中出现次数最多的数 (10 分) 要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 在一行中给出序列中整数个数N(0<N≤1000),依次给出N个 ...

  8. 7-55 求整数序列中出现次数最多的数 (15 分)

    7-55 求整数序列中出现次数最多的数 (15 分) 本题要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数. ...

  9. c语言找出一个数组中出现次数最多的那个元素,c语言找出数组中出现次数最多地那个元素...

    matlab中如何找出不同维度矩阵出现次数最多的数组并记录其个数 首先是胞矩阵中的序列问题,不妨假设AA{1}是一个多行两列的数据,AA{2}同例.程序如下clcclearallAA{1}=[12;2 ...

最新文章

  1. 利用委托和泛型实现树的常用操作
  2. iOS进阶之类别(Category)(9)
  3. JAVA面试常考系列五
  4. linux libmpi.so.12,单机安装vasp5.4.4,系统SUSE 12 SP3,编译器Intel_Parallel_Studio_XE_2019_Linux...
  5. java day47【redis概念 、下载安装 、 命令操作 、持久化操作 、使用Java客户端操作redis】...
  6. 将长方形木框拉成平行四边形_微课|人教版五年级数学上册6.1平行四边形的面积(P8690)...
  7. 直接下载Google Play上APP的安装包
  8. 银行卡号与开户行对照文档
  9. 双 JK 触发器 74LS112 逻辑功能。真值表_C08. D触发器
  10. 计算机专业考研可关注哪些公众号,考研应关注哪些公众号?
  11. 使用sort(function(a,b){return a-b})对数组进行排序的原理
  12. C++一步解决cls闪烁问题
  13. Python 获取文件后缀详解
  14. S4 MM BP配置
  15. CMake 常用总结二:CMake 生成静态库与动态库
  16. 红图新媒体-完美的新媒体矩阵方案需要这样做
  17. 三十种凉拌菜做法大比拼
  18. 投票助力源码_公众号投票源码_女神来了投票5.2.0
  19. CH583电子价签在线管理方案
  20. windows2003安全策略

热门文章

  1. 商户怎样选择商业wifi进行移动营销
  2. Gloomy对Windows内核的分析(对象管理器)
  3. 死磕算法第二弹——栈、队列、链表(1)
  4. 行为型模式【访问者模式】
  5. laravel框架中微信公众号推送消息
  6. JVM黑马版:笔记、应用、速查
  7. 后端JavaScript所学
  8. Python(解非线性方程和线性方程)求水力学法向深度-浪涌高度速度及互连反应器中的浓度和流体分布
  9. 在知乎看到一篇关于JavaScript书籍进阶的回答(作者:司徒正美)
  10. 原生ajax(常见的http状态码/同源-跨域)