数组中出现最多的数 思维

数组中出现最多的数 思维

原题链接:https://qduoj.com/problem/20

题意

给你一个数组,输出里面出现超过\(1/2\)的元素。保证有且只有一个解。
输入:
第一行是一个整数\(n(n<=1e7)\),表示册数据的个数,之后每一行都是一个整数。
输出:
输出出现超过\(1/2\)的那个数字。

提示:不要使用\(cin\),数据量很大;要将时间复杂度降到O(n)。

题解思路

我们可以使用栈来解决这个问题,首先把第一个数压入栈,之后每次输入的数字和栈顶元素进行比较,如果和栈顶的元素相同,那么就可以压入栈,否者就不能压入栈,并且还要把栈顶元素出栈。如果比较的过程中出现了栈为空,那么就直接把元素压入栈即可,就不用比较了。

这里可以使用\(STL\)模板来进行,很简洁。

代码实现

#include<cstdio>
#include<stack>
using namespace std;
typedef long long ll;
stack<int> a;
int main()
{	
	int n, tmp;
	scanf("%d%d",&n, &tmp);
	a.push(tmp);
	for(int i=2; i<=n; i++){
		scanf("%d", &tmp);
		if(!a.empty())
			if(tmp!=a.top())
				a.pop();
			else a.push(tmp);
		else a.push(tmp);
	}
	printf("%d\n", a.top());
	return 0; 
}
posted @ 2019-11-30 21:01  ALKING1001  阅读(320)  评论(0编辑  收藏  举报