数组中出现次数超过一半的数字
来源:互联网 发布:淘宝网天猫连衣裙 编辑:程序博客网 时间:2024/06/04 21:16
何海涛:《剑指Offer:名企面试官精讲典型编程题》:九度OJ
- 题目描述:http://ac.jobdu.com/problem.php?cid=1039&pid=12
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
- 输入:
每个测试案例包括2行:
第一行输入一个整数n(1<=n<=100000),表示数组中元素的个数。
第二行输入n个整数,表示数组中的每个元素,这n个整数的范围是[1,1000000000]。
- 输出:
对应每个测试案例,输出出现的次数超过数组长度的一半的数,如果没有输出-1。
- 样例输入:
9
1 2 3 2 2 2 5 4 2
- 样例输出:
2
代码AC:
#include <stdio.h>#include <stdlib.h>int main(){ long long *data, tmp; int n, i, count; while( scanf("%d", &n) != EOF ) { count = 0; data = ( long long * )malloc( sizeof( long long ) * n ); for( i = 0; i < n; i++ ) { scanf("%lld", &data[i]); if( count == 0 ) { tmp = data[i]; count++; continue; } if( tmp == data[i] ) { count++; } else { count--; } } count = 0; for( i = 0; i < n; i++ ) // 注意仅仅有上面的count是不行的! { // 例如:1 2 3 4 5,那么到最后输出的count==1,但是5并不是所需!所以!要检查! if( tmp == data[i] ) { count++; } } if( 2 * count > n ) { printf("%lld\n", tmp); } else { printf("-1\n"); } } return 0;}
- 数组中超过出现次数超过一半的数字
- 74.数组中超过出现次数超过一半的数字
- 74 数组中超过出现次数超过一半的数字
- 【数组4】数组中出现次数超过一半的数字
- 数组4:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过长度一半的数字
- 2-数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字[算法]
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字--百度
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 寻找数组中出现次数超过一半的数字
- 面试训练数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- arm-linux-交叉编译工具
- ExtJs中OA管理中组织和用户关系左右选择组件的运用
- 智能手表Pebble将于四月发布SDK
- Struts2 +Extjs结合例子
- button
- 数组中出现次数超过一半的数字
- MSR-Model Specific Registers (特殊模块寄存器)
- 集合框架
- Linux用户空间与内核空间
- ORA-32104
- android 用户界面笔记之Button和ImageButton实现按钮响应事件两种方法
- libmysqlclient.so.15: cannot open shared object file: No such file or directory
- char *name 与 char name[]的区别
- 第二章 搭建JavaFx开发环境