HDU 1029 出现次数最多(不解)
2012-04-17 14:10
190 查看
我对这道题表示不解!明明题目没有什么限制条件,居然用以下第一种代码也过了。
代码一:(虽过了,但个人觉得是错误答案!)
代码二(正解)(非本人原创,来源网络):
分析下第二个代码:n是个奇数,要求一个数至少出现(n+1)/2次。用time来记录解出现的次数,出现了正确解就令time自增1,不是正确解就使time自减1。
那么,正确解对应的time一定是不小于1的。可以用一个极端的例子来说明下:输入3 3 3 3 3 3 2 1 5 6 8,开始当ans=3时,time=6,那么继续执行num!=3了,
time开始自减,但最终time=1,始终不会进入程序if(time==0){}内部执行了。
利用最终的time,还可以计算出解出现的次数。公式为:(n-time)/2+time。
代码一:(虽过了,但个人觉得是错误答案!)
#include<iostream> using namespace std; int a[32768]; int main() { int i,tem,n; while(cin>>n) { memset(a,0,sizeof(a)); for(i=0;i<n;i++) { cin>>tem; a[tem]++; } for(i=0;i<32768;i++) { if(a[i]>=(n+1)/2) { cout<<i<<endl; break; } } } return 0; }
代码二(正解)(非本人原创,来源网络):
#include<iostream> using namespace std; int main() { int n; while(cin>>n) { int time=0,ans,num; while(n--) { cin>>num; if(time==0) { ans=num; time++; } else { if(num==ans) time++; else time--; } } cout<<ans<<endl; } return 0; }
分析下第二个代码:n是个奇数,要求一个数至少出现(n+1)/2次。用time来记录解出现的次数,出现了正确解就令time自增1,不是正确解就使time自减1。
那么,正确解对应的time一定是不小于1的。可以用一个极端的例子来说明下:输入3 3 3 3 3 3 2 1 5 6 8,开始当ans=3时,time=6,那么继续执行num!=3了,
time开始自减,但最终time=1,始终不会进入程序if(time==0){}内部执行了。
利用最终的time,还可以计算出解出现的次数。公式为:(n-time)/2+time。
相关文章推荐
- HDU 1800 简单贪心 13.1.10用trie重做 ---其实是统计出现次数最多的单词
- hdu 5038 求出现次数最多的grade
- hdu 5038 求出现次数最多的grade
- HDU 1029 某个数出现的次数大于等于(N+1)/2的是哪个 map水题
- hdu 1806 Frequent values(给定一个非降序数组,求任意区间内出现次数最多的数的次数)
- hdu 1004-统计出现次数最多的字符串
- HDU 1004.Let the Balloon Rise【找出出现次数最多的字符串】
- [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法
- 输入字符串,统计字符串中出现频率次数最多的字符,并统计次数,以及每个字符字符出现的次数
- 华为上机试题(java)找出一个字符串中出现次数最多的字符
- 瑞恩面试编程题:找出数组中出现次数最多且最大的那个数及出现的次数
- 找出字符串中连续出现次数最多的子串
- 用于对字符串中的字符计数, 并可以取出出现次数最多的字符和次数, 若次数最多的有多个,则全部求出
- 水-坑--出现次数最多的整数
- 任意给定一整数数组,求两个元素之差的最大值和数组中出现次数最多的数
- 找出给定字符串中出现最多的字符和次数
- Js实现找出字符串中出现次数最多的字符
- 海量日志数据,找出出现次数最多的IP地址。
- 如果用JS得到字符串中出现次数最多的字母
- 数组中出现次数最多的元素_legend