zoukankan      html  css  js  c++  java
  • 数组中出现最多的数 思维

    数组中出现最多的数 思维

    原题链接: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
    ", a.top());
    	return 0; 
    }
    
    欢迎评论交流!
  • 相关阅读:
    「联赛模拟测试33」题解
    分享几个基于vue的移动端框架
    11-15
    test
    联赛模拟测试20 C. Weed
    联赛模拟测试20 D. Drink
    联赛模拟测试24 联合权值·改
    联赛模拟测试21 表格
    近期的一些考试题目
    shell脚本执行错误 $' ':command not found
  • 原文地址:https://www.cnblogs.com/alking1001/p/11963940.html
Copyright © 2011-2022 走看看