HDU—— 1029 Ignatius and the Princess IV
2014-11-15 19:54
465 查看
题意:给定一个整数N,然后给出N个整数,统计出现次数最多的那个数并输出。
解题思路:我们很容易的看出来,在一个序列中如果去掉2个不同的元素,那么原序列中的多元素,在新的序列中还是多元素,因此我们只要按照序列依次扫描,先把t赋值给result,增加个计数器,cnt = 1;然后向右扫描,如果跟result相同,则cnt++,不同,那么cnt --,这个真是我们从上面那个结论里得出的,一旦cnt == 0了,那么必定c不是多元素,这个时候把t赋值为result,cnt = 1;,重复该过程,知道结束,这个时候,result就是多元素,这个的时间复杂度为n,该题本来可以用数组保存每个元素,然后递归上述过程,可是,用数组超内存,因此我们可以直接按照上述过程计算。
Code:
解题思路:我们很容易的看出来,在一个序列中如果去掉2个不同的元素,那么原序列中的多元素,在新的序列中还是多元素,因此我们只要按照序列依次扫描,先把t赋值给result,增加个计数器,cnt = 1;然后向右扫描,如果跟result相同,则cnt++,不同,那么cnt --,这个真是我们从上面那个结论里得出的,一旦cnt == 0了,那么必定c不是多元素,这个时候把t赋值为result,cnt = 1;,重复该过程,知道结束,这个时候,result就是多元素,这个的时间复杂度为n,该题本来可以用数组保存每个元素,然后递归上述过程,可是,用数组超内存,因此我们可以直接按照上述过程计算。
Code:
#include<iostream> #include<string.h> using namespace std; int main() { int n,i; int t; int cnt; int result; while(scanf("%d",&n)!=EOF) { cnt=0; for(i=0;i<n;i++) { scanf("%d",&t); if(cnt==0) { cnt=1; result=t; } else { if(t==result)cnt++; else cnt--; } } printf("%d\n",result); } return 0; }
相关文章推荐
- hdu 1029 ( Ignatius and the Princess IV ) 水题
- HDU 1029 Ignatius and the Princess IV - Problem A
- hdu 1029 Ignatius and the Princess IV(水题,map)
- hdu 1029 Ignatius and the Princess IV
- [ACM] hdu 1029 Ignatius and the Princess IV (动归或hash)
- hdu 1029 Ignatius and the Princess IV
- HDU 1029 Ignatius and the Princess IV
- hdu_1029_Ignatius and the Princess IV(模拟)
- HDU--1029--Ignatius and the Princess IV
- hdu-oj 1029 Ignatius and the Princess IV
- HDU 1029 Ignatius and the Princess IV
- HDU 1029 Ignatius and the Princess IV
- Hdu 1029 Ignatius and the Princess IV (鸽巢原理)
- HDU 1029 Ignatius and the Princess IV
- hdu 1029 Ignatius and the Princess IV
- hdu 1029 Ignatius and the Princess IV(快排)
- hdu 1029 Ignatius and the Princess IV
- HDU 1029 Ignatius and the Princess IV
- HDU1029——Ignatius and the Princess IV
- Ignatius and the Princess IV hdu 1029