1.题意:第一行一个数字N,表示一共有多少个数字,第二行N个数字,保证其中至少有一个数字出现次数超过一半,任务是求出这个出现最多的数。

2.分析:本题是明显的求众数的问题,常规思路为开一个大数组,在读入数据的同时统计数据出现的次数,最后遍历出众数,显然的提交之后会MLE,因为题面上的数据范围为:

40%的数据满足(n<=100)
60%的数据满足(n<=1000000),内存大小限制128Mb
70%的数据满足(n<=1000000),内存大小限制3Mb
100%的数据满足(n<=1000000),且所使用内存大小不能超过1Mb

所有输入数字为小于1000000007的非负整数。

那么这里提供一个新的思路:即不用数组统计出现次数,因为最终关注的只是众数,无需记录所有信息。

考察绝对众数的两个性质:(1)众数的出现次数严格大于总数字的一半;(2)删除数组中两个不同的数,绝对众数不变

通过不断删除两个不同的数,最终剩下一个或者两个数的时候,留下的一定是单独的一个绝对众数(数组有奇数个数)或者两个绝对众数(数组有偶数个数)

具体操作是维护两个变量num以及temp分别表示临时众数与当前读入的数字,一个num_cnt表示已经遇到的临时众数的数量

当num != temp 则忽略这两个数:temp继续读入下一个数。num_cnt--

当num = temp 则忽略temp,增加num的个数:temp继续读入下一个数,num_cnt++

当num_cnt为0,选取下一个temp为num

代码如下:

 # include <iostream>
# include <cstdio>
using namespace std;
int N;
int main()
{
while(scanf("%d",&N)!=EOF)
{
int num;
int num_cnt=;
scanf("%d",&num);
for(int i=;i<N;i++)
{
int temp;
scanf("%d",&temp);
if(num_cnt==)
{
num=temp;
num_cnt=;
continue;
}
if(temp==num)
num_cnt++;
else
num_cnt--;
}
printf("%d\n",num);
}
return ;
}

Vijos1917 艾酱最喜欢的数字 [求绝对众数]的更多相关文章

  1. 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划

    Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...

  2. Python3练习题 001:4个数字求不重复的3位数

    #Python练习题 001:4个数字求不重复的3位数#方法一import itertoolsres = [][res.append(i[0]*100 + i[1]*10 + i[2]) for i ...

  3. XidianOJ 1076 小W喜欢的数字

    题目描述 大家都知道,小W是一名大帅哥,当然比起Light还是有点儿差距的!帅气的小W认为0-9这些数字,只有1,3,5是完美的. 欲问小W为什么,小W总是说"帅哥,是不需要解释的" ...

  4. Python练习题 001:4个数字求不重复的3位数

    听说做练习是掌握一门编程语言的最佳途径,那就争取先做满100道题吧. ----------------------------------------------------------------- ...

  5. 【luogu1468】[Violet]蒲公英--求区间众数

    题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了.我觉得把那么可怕 ...

  6. 求50-100内的素数(java)

    实现代码: public class sushu { public static void main(String[] args) { for(int i=50 ; i<=100; i++){ ...

  7. 程序设计入门——C语言 第3周编程练习 2 数字特征值(5分)

    2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...

  8. 求数组中的最小子数组,时间复杂度o(n),java

    石家庄铁道大学 信1405-1 班 唐炳辉 题目:给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 设计思路:两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值,当 ...

  9. 编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)

    圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始 ...

随机推荐

  1. Android中Scroller类的分析

    今天看了一下项目中用到的ViewFlow控件,想弄明白其工作原理.从头开始分析,卡在"滚动"这儿了. 做android也快两年了,连最基本的滚动都不熟悉,真是惭愧...遂网上找资料 ...

  2. H5本地存储技术和微信小程序中的本地存储

    1.H5的本地存储 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. 【NS2】Ubuntu 12.04 LTS 中文输入法的安装(转载)

    本文是笔者使用 Ubuntu 操作系统写的第一篇文章!参考了红黑联盟的这篇文章:Ubuntu 12.04中文输入法的安装 安装 Ubuntu 12.04 着实费力一番功夫,老是在用 Ubuntu 来引 ...

  4. JavaScript void

    我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢? javascript:void(0) ...

  5. UVALive - 4787 ICPC WF 2010 Tracking Bio-bots【dp】

    UVa 4787 WF题果然不一样,本来想暴力搜索,数据太大了,数组都开不了.看题解也不太懂,记录一下书上的题解,以后再看: 此题是给出N*M的格子,有些地方是墙,不可走.求所有不能只通过向上或者向右 ...

  6. React Native中pointerEvent属性

    在React Native界面开发中, 如果使用绝对定位布局,在代码运行时的某个时刻有可能会遮盖住它的下方的某个组件.这是因为绝对定位只是说这个组件的位置由它父组件的边框决定. 绝对定位的组件可以被认 ...

  7. python之 算法和数据结构

    什么是计算机科学? --首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已,所谓的计算机科学实际上是对问题,解 ...

  8. 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

    2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...

  9. CODE FESTIVAL 2017 qual A D Four Coloring(补题)

    这题看了好几天才看懂,一直误解题解中的d * d了 题解中说把大的格子划分成d * d的方格,我划分的时候把格子当作点来算的,一直觉得那明明是(d-1) * (d-1),昨天刚反映过来 思路:把格子旋 ...

  10. Pycharm中Python PEP8 的警告

    https://blog.csdn.net/serizawa_tamao/article/details/88658694