[Jobdu] 题目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
经典的题目,如果可以排序,就先排序,找n/2位置的元素,如果有,那么这个元素就是,但也有可能没有,所以要再检查一遍,该方法的时间复杂度为O(nlogn)。
另外一种方法就是用一个栈来实现,对于当前元素,若栈空,则入栈,若栈不为空,与栈顶元素比较,相等则入栈,不等则弹出栈顶元素。如果有主元素,最后的栈顶一定是主元素。如果没有,同上面一样,最后的栈顶元素不一定是答案,所以最后还要检查一遍。该方法时间复杂度为O(n),可以只用一些标记来实现栈,因为栈里只可能有一种元素。空间复杂度可以做到O(1)。
#include <iostream>
#include <stack>
using namespace std; int main()
{
int n;
long a[]; while (cin >> n) {
for (int i=; i < n; i++){
cin >> a[i];
}
stack<int> s;
for (int i=; i < n; i++){
if (s.empty() || s.top() == a[i]){
s.push(a[i]);
} else {
s.pop();
}
}
if (s.empty()) {
cout << "-1" << endl;
} else {
int count = ;
for (int i = ; i < n; ++i)
if (a[i] == s.top()) ++count;
if (count > n / ) cout << s.top() << endl;
else cout << "-1" << endl;
}
}
return ;
}
/**************************************************************
Problem: 1370
User: hupo250
Language: C++
Result: Accepted
Time:90 ms
Memory:2228 kb
****************************************************************/
[Jobdu] 题目1370:数组中出现次数超过一半的数字的更多相关文章
- 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...
- 九度OJ 1370 数组中出现次数超过一半的数字
题目地址:http://ac.jobdu.com/problem.php?pid=1370 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2 ...
- 数组中出现次数超过一半的数字 -java
数组中出现次数超过一半的数字 -java 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散列表的方式,也就是统计每个数组 ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 《剑指offer》— JavaScript(28)数组中出现次数超过一半的数字
数组中出现次数超过一半的数字 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超 ...
- 《剑指offer》第三十九题(数组中出现次数超过一半的数字)
// 面试题39:数组中出现次数超过一半的数字 // 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例 // 如输入一个长度为9的数组{1, 2, 3, 2, 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 ...
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
随机推荐
- Python网络编程 - 请求地址上的文件并下载
我们用到了requests库,由于是第三方的,必须下载 如果是python 2.x用下面命令 pip install requests python 3.x用下面命令 easy_install req ...
- 10、java初始化顺序
在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变 ...
- java Socket Udp聊天
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...
- Linux 系统sudo命令
Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用.如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更 ...
- Windows I/O完成端口
内容: 1.基本概念 2.WINDOWS完成端口的特点 3.完成端口(Completion Ports )相关数据结构和创建 4.完成端口线程的工作原理 5.Windo ...
- WIFI物联网平台微信端开发分享
本文由企鹅圈原创成员Hunter_Zhu贡献. 本篇文章是基于近期一个项目微信端开发过程的一个总结.文中主要介绍了云智易平台下微信端开发的流程.该平台提供的主要功能以及此次H5开发使用到的一些UI组件 ...
- Centos定时执行python脚本
其实就是linux的定时任务.老记不住参数,这次写下来,省着老百度.本文没有技术含量,请大家不要吐槽. ================================================ ...
- 转发:微信小程序-template模板使用
转载于CSDN--[向朔1992]处.(部分内容根据实际情况有所修改) 小程序实现主页面调用次级页面的wxml页面内容,如下图: 根据上图,我们可以将图片和图片信息作为一个goodsList.wx ...
- reindex-maven 私服(nexus)架设以及项目管理中遇到的问题及解决方案(updating)
--- 用maven 的过程中 大问题小问题实在是不少 ,就不一篇文章一篇文章的写了,干脆写在一起 ---- ------- nexus 加索引 点击Administration菜单下面的Re ...
- Emacs 文件中的查找操作
1,在本文件中查找 list-matching-lines 命令会列出本文件中所有出现text的地方.下面是它的一个输出示例: 7 matches for "ngx_http_wait_re ...