首页 > 学院 > 开发设计 > 正文

1054. The Dominant Color (20)

2019-11-11 03:47:00
字体:
来源:转载
供稿:网友

1. 原题: https://www.patest.cn/contests/pat-a-PRactise/1054

2. 思路:

题意:在M*N个数中,找出占比超过一半的数字。思路:有多种方法,最普通的是用数组下标映射数字,记录最大值输出。还有一种巧妙的方法,即在线处理法。题目说存在一个主元素,即一个数超过一半。相当于这个数的个数减去其他不同的个数仍然大于0.所以,我们可以设置一个变量cur,即当前的主元素,及它的个数cnt。在读入数据的时候,如果相等,cnt++, 不等就自减。一旦cnt小于0的时候,那这个数cur肯定不是主元素,更换cur为当前统计的数。统计完直接输出cur。不要用cin,超时。已AC。

3. 源码(已AC):

#include<iostream>using namespace std;int main(void){	//freopen("in.txt", "r", stdin);	int M, N;	scanf("%d %d", &M, &N);	int num = M*N;//总个数	int cur, cnt = 1;//分别为当前颜色,个数	scanf("%d", &cur);//先读入第一个,初始化。	for (int i = 1; i < num; i++)	{		int tem;		scanf("%d", &tem);		if (cur == tem)//相等,自增			cnt++;		else		{			cnt--;			if (cnt < 0)			{				cur = tem;//小于0,更换主元素,cnt设为1				cnt = 1;			}		}	}	printf("%d/n", cur);	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表