mode

Time Limit:1000MS     Memory Limit:1024KB     64bit IO Format:%lld & %llu

 

Description

给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

Input

第1行一个正整数n。 第2行n个正整数用空格隔开。

Output

一行一个正整数表示那个众数。

Sample Input

  1. 5 3 2 3 1 3

Sample Output

  1. 3

Hint

100%的数据,n<=500000,数列中每个数<=maxlongint。

题解:

注意这个题,对内存要求非常高1024k,1kb等于1024字节,如果想用数组的话,至少要500000*4/1024大概要2000k,还不算原本程序什么的占的内存;原来我还想着用map记录的,因为想到数据不超过int也呆1e9多,那肯定报内存,现在想想map也会爆内存,怎么办呐,我们只有用数字代替了,因为数字出现的个数会是n的一半还多,那么我们只需要每一步,如果跟上一个相等就++不想等就等于当前,因为ans必然会出现n的一半还多,所以不愁得不到答案了;

代码:

  1. /*
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<cstring>
  7. #include<vector>
  8. #include<map>
  9. #include<string>
  10. using namespace std;
  11. typedef long long LL;
  12. map<string,int>mp;
  13. int main(){
  14. char s[20];
  15. char ans[20];
  16. int n;
  17. while(~scanf("%d",&n)){
  18. mp.clear();
  19.  
  20. for(int i=0;i<n;i++){
  21. scanf("%s",s);
  22. mp[s]++;
  23. if(mp[s]>n/2)strcpy(ans,s);
  24. }
  25. puts(ans);
  26. }
  27. return 0;
  28. }
  29. */
  30. #include<stdio.h>
  31. #include<stdlib.h>
  32. /*
  33. int cmp(const void *a,const void *b){
  34. return *(int *)a<*(int *)b;
  35. }
  36. int a[500005];
  37. int main(){
  38. int n;
  39. while(~scanf("%d",&n)){
  40. for(int i=0;i<n;i++)scanf("%d",a+i);
  41. qsort(a,n,sizeof(a[0]),cmp);
  42. int cur=1,ans;
  43. for(int i=1;i<n;i++){
  44. if(a[i]==a[i-1])cur++;
  45. else{
  46. if(cur>n/2)ans=a[i-1];
  47. cur=1;
  48. }
  49. }
  50. if(cur>n/2)ans=a[n-1];
  51. printf("%d\n",ans);
  52. }
  53. return 0;
  54. }
  55. */
  56. int n,ans,cur,num;
  57. int main(){
  58. while(~scanf("%d",&n)){
  59. ans=-;num=;
  60. while(n--){
  61. scanf("%d",&cur);
  62. if(cur==ans)num++;
  63. else{
  64. num--;
  65. if(num<){
  66. ans=cur;
  67. num=;
  68. }
  69. }
  70. }
  71. printf("%d\n",ans);
  72. }
  73. return ;
  74. }

mode(思维,注意内存)的更多相关文章

  1. Javascript基础四(数组,字符,对象,日期)

    第一节:数组 1.数组的概念及定义     可以存放一组数据:          当需要操作多个数据时: 2.数组的创建方式 var arr1 = [1,2,3]; //字面量方式 var arr2 ...

  2. Java内存管理思维导图

    文 by / 林本托 Tips 做一个终身学习的人. 如果想要成为一名合格的 Java 程序员,就必须要涉及和掌握一些 Java 虚拟机的内部结构和特性.最近在读<深入理解Java 虚拟机> ...

  3. Java 内存溢出思维导图

    文 by / 林本托 Tips 做一个终身学习的人. 在 Java 内存中,只有一个区域不会发生 OOM 异常,那就是程序计数器内存.下面的思维导图记录了每个内存区域发生内存异常的条件和基本的解决思路 ...

  4. JavaScript 中的内存和性能、模拟事件(读书笔记思维导图)

    由于事件处理程序可以为现代 Web 应用程序提供交互能力,因此许多开发人员会不分青红皂白地向页面中添加大量的处理程序.在 JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体 ...

  5. 内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!(内附超全思维导图)

    主存(RAM) 是一件非常重要的资源,必须要认真对待内存.虽然目前大多数内存的增长速度要比 IBM 7094 要快的多,但是,程序大小的增长要比内存的增长还快很多.不管存储器有多大,程序大小的增长速度 ...

  6. Spark思维导图之内存管理

  7. JVM内存结构思维导图

  8. java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出

    上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解) 线上项目出现 ...

  9. 计算机程序的思维逻辑 (8) - char的真正含义

    看似简单的char 通过前两节,我们应该对字符和文本的编码和乱码有了一个清晰的认识,但前两节都是与编程语言无关的,我们还是不知道怎么在程序中处理字符和文本. 本节讨论在Java中进行字符处理的基础 - ...

随机推荐

  1. openstack vm image

    1,openstack 基于iso生成镜像

  2. RehHat enterprise 5.4 安装git

    今天想来研究一下git,就自己安装一个试试,没想到遇到各种问题.经过各种百度和google,终于都解决了,现在来总结一下: 1.安装完redhat 5.4,安装gcc编译器的问题:这个gcc编译器需要 ...

  3. 登录DSCCC控制台报错提示:安装错误代码: 3

    登录DSCCC控制台报错内容:读取安装配置时出错 检查目录服务控制中心状态时出现意外错误. 显示详细资料 隐藏详细资料 安装错误代码: 3 堆栈: com.sun.directory.common.s ...

  4. JS Encoding and Decoding

    //charator Str to Hex function strToHex(str) { var rs = ""; for (var i = 0; i < str.len ...

  5. 下拉菜单中的Option对象

    1.创建Option对象 1.1 var optionEle1 = document.createElement('option'); 1.2 var optionEle2 = new Option( ...

  6. IRP 与 派遣函数

    什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...

  7. C++标准程序读书笔记-第三章错误和异常处理

    1.命名空间(namespace)std C++标准程序库中的所有标示符都被定义于一个名为std的namespace 2.标准异常类别 (1)语言本身或标准程序库所抛出的所有异常,都派生自基类exce ...

  8. (原)java中opencv的width的问题

    调试程序,我这边负责在JNI中将缓冲区中的数据转换成bitmp.测试时用320*240的图像测试正常,但是别人使用的图像宽度为270时,图像出现了错位(没截图,不好理解). 首先想到的是opencv的 ...

  9. 模块化开发之sea.js实现原理总结

    seajs官网说:seajs是一个模块加载器,所以学习它并不难. 在我的理解就是:本来我们是需要手动创建 script标签 引入 js文件的,但用seajs后,它就自动帮我们完成这些工作. 这里只说实 ...

  10. 模拟HTTP请求:Request Maker

    摘要 : Request Maker是一款可以模拟HTTP请求的谷歌浏览器插件. Request Maker的开发背景 现在由于restful式的web api的兴起,越来越多的开发者习惯使用URL来 ...