九度oj 题目1370:数组中出现次数超过一半的数字
- 题目描述:
-
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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 第一次代码如下
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std;
int n;
int num[]; int cmp(const void *a, const void *b) {
int at = *(int *)a;
int bt = *(int *)b;;
return at - bt;
}
int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&num[i]);
}
qsort(num, n, sizeof(int), cmp);
int cnt = ;
int pan = n/;
bool isFind = false;
for(int i = ; i < n; i++) {
if(num[i] == num[i-]) {
cnt++;
if(cnt > pan) {
printf("%d\n",num[i]);
isFind = true;
break;
}
}
else {
cnt = ;
}
}
if(!isFind) {
puts("-1");
}
}
return ;
}没有考虑到n == 1时情况,出错
修改如下
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std;
int n;
int num[]; int cmp(const void *a, const void *b) {
int at = *(int *)a;
int bt = *(int *)b;;
return at > bt;
}
int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&num[i]);
}
qsort(num, n, sizeof(int), cmp);
double cnt = ;
double pan = n/;
bool isFind = false;
int ans = num[];
for(int i = ; i < n; i++) {
if(num[i] == num[i-]) {
cnt++;
if(cnt > pan) {
ans = num[i];
break;
}
}
else {
cnt = ;
}
}
if(cnt > pan) {
printf("%d\n",ans);
}
else {
puts("-1");
}
}
return ;
}由于超过一半,所以如果存在这样的数,排好序后num[n/2]就是该数
本来以为下面代码会更快,没想到居然变慢了
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std;
int n;
int num[]; int cmp(const void *a, const void *b) {
int at = *(int *)a;
int bt = *(int *)b;;
return at > bt;
}
int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&num[i]);
}
qsort(num, n, sizeof(int), cmp); int pan = n/;
int cnt = ;
for(int i = ; i < n; i++) {
if(num[i] == num[pan]) {
cnt++;
if(cnt > pan) {
break;
}
}
}
if(cnt > pan) {
printf("%d\n",num[pan]);
}
else {
puts("-1");
}
}
return ;
}
九度oj 题目1370:数组中出现次数超过一半的数字的更多相关文章
- 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...
- 九度OJ 1370 数组中出现次数超过一半的数字
题目地址:http://ac.jobdu.com/problem.php?pid=1370 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2 ...
- 《剑指offer》第三十九题(数组中出现次数超过一半的数字)
// 面试题39:数组中出现次数超过一半的数字 // 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例 // 如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字
题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...
- 数组中出现次数超过一半的数字 -java
数组中出现次数超过一半的数字 -java 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散列表的方式,也就是统计每个数组 ...
- 《剑指offer》— JavaScript(28)数组中出现次数超过一半的数字
数组中出现次数超过一半的数字 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超 ...
- 剑指Offer:数组中出现次数超过一半的数字【39】
剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...
- 编程算法 - 数组中出现次数超过一半的数字 代码(C)
数组中出现次数超过一半的数字 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 数组中有一个数字出现的次数超过数组长度的一半, 请找出这个数字. ...
- php实现求数组中出现次数超过一半的数字(isset($arr[$val]))(取不同数看剩)(排序取中)
php实现求数组中出现次数超过一半的数字(isset($arr[$val]))(取不同数看剩)(排序取中) 一.总结 1.if(isset($arr[$val])) $arr[$val]++; //1 ...
随机推荐
- COGS 2815. 天黑请闭眼
★ 输入文件:jos.in 输出文件:jos.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 天亮了,请大家睁眼 昨晚是,平安夜. 处于集会中心的村民们大多数都 ...
- 【Python图像特征的音乐序列生成】一个更科学的图片分类参考方法,以及一个看起来很好用的数据集
数据集地址:http://www.imageemotion.org/ 论文地址:http://www.doc88.com/p-1905670442096.html
- PostgreSQL扫盲教程
在这个链接下载PostgreSQL. 安装时,请记住您给user postgres设置的初始密码,以及默认端口号5432,后面需要使用. 再安装图形化管理UI pgadmin,可以从这个链接获得. 安 ...
- CodeForces 77C Beavermuncher-0xFF (树形dp)
不错的树形dp.一个结点能走多次,树形的最大特点是到达后继的路径是唯一的,那个如果一个结点无法往子结点走,那么子结点就不用考虑了. 有的结点不能走完它的子结点,而有的可能走完他的子节点以后还会剩下一些 ...
- 使用Timer组件制作左右飘动的窗体
实现效果: 知识运用: Form类的Left和Top属性 实现代码: private void timer1_Tick(object sender, EventArgs e) { Rectangle ...
- Problem C: 查找最大元素
Problem C: 查找最大元素 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 786 Solved: 377[Submit][Status][Web ...
- 《队长说得队》【Alpha】Scrum meeting 5
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...
- Bootstrap历练实例:带列表组的面板
带列表组的面板 我们可以在任何面板中包含列表组,通过在 <div> 元素中添加 .panel 和 .panel-default 类来创建面板,并在面板中添加列表组.您可以从 列表组 一章中 ...
- 协议(Protocol)与委托代理(Delegate)
协议(Protocol)的作用: 1. 规范接口,用来定义一套公用的接口: 2. 约束或筛选对象. 代理(Delegate): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...
- TypeError: Cannot read property 'tap' of undefined
E:\vue-project\vue-element-admin-master>npm run build:prod vue-element-admin@3.8.1 build:prod E:\ ...