数组中超过N分之一的数字
寻找数组中超过一半的元素,这是一道十分经典和普遍的面试题了,实现起来比较容易,只是需要写技巧,将问题扩展就可以衍生到求数组中几个超过N分一的元素,例如找出数组中3个出现次数超过1/4的元素。
/*************************************************************************
> File Name: morethanharf.c
> Author: desionwang
> Mail: wdxin1322@qq.com
> Created Time: Tue 29 Oct 2013 05:43:14 PM CST
************************************************************************/ #include<stdio.h> int find(int arr[], int len){
if(arr == NULL || len <= 0){
return -1;
}
int curr = arr[0];
int count = 1;
int i;
for(i = 1; i < len; i++){
if(curr == arr[i]){
count++;
}else{
count--;
if(count < 0){
curr = arr[i];
count = 1;
}
}
}
//check the array is valid or not
count = 0;
for(i = 0; i < len ; i++){
if(arr[i] == curr){
count++;
}
}
if(curr * 2 < len){
return -1;
}else{
return curr;
}
}
这种方法是每次消除两个不同的查询,当两个相邻的查询不同时,相应的计数减一,当相同是加一,当计数减为0时,该元素从被选中去除变为不确定。
以上是寻找超过二分之一的元素,当寻找两个超过三分之一的元素,或是N-1个超过N分之一的元素时,也同样可以采用这种思想,只要我们每次去掉N个不同的查询就可以,那样剩下的元素就是我们要找的元素。
问题可以这样求解,申请一个大小为N的map,开始遍历数组,如果:
1、遇到一个不在map中的元素,则插入map中,并将value置1
2、遇到一个在map中的元素,则将map中该元素的对应值加1,
当map中的元素个数等于N时,最map中的每个key都减一,key为零的元素直接删除,这样遍历知道数组遍历完,那么map中剩下的key就是所求的元素。
数组中超过N分之一的数字的更多相关文章
- 九度OJ 1351 数组中只出现一次的数字
题目地址:http://ac.jobdu.com/problem.php?pid=1351 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输 ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- 剑指Offer 40. 数组中只出现一次的数字 (数组)
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 题目地址 https://www.nowcoder.com/practice/e02fdb54 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
- 【剑指Offer】40、数组中只出现一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度为O(1). 解题思路: 这道题目相对比较难 ...
- 剑指offer:数组中只出现一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路分析: 1. 直接想法,每个数字遍历,统计出现次数,复杂度O(n^2),超时. 2. 借助 ...
- 《剑指offer》数组中只出现一次的数字
本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...
- 【剑指Offer】数组中只出现一次的数字 解题报告(Python)
[剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 剑指Offer 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为有2个数字只出现了一次,而其他的数字都是2次,可以通过异或运算,得到最后这2个只 ...
随机推荐
- Shell脚本中$0、$?、$!等的意义
变量说明$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码(返回值)$- 使用Set命令设定的Flag一览$* 所有参 ...
- 洛谷1894 [USACO4.2]完美的牛栏The Perfect Stall
原题链接 二分图最大匹配板子. 每个奶牛向它愿意去的牛棚连边,跑二分图最大匹配即可. 这里我用的是匈牙利算法. #include<cstdio> #include<cstring&g ...
- ZBlog你选择PHP还是ASP?
最近趁着空闲玩了一下zblog,对于很多第一次接触zblog的博主大多都会问zblog是PHP好还是ASP好?我们应该如何选择?其实,对于这个问题我也不是很懂,我个人比较倾向于PHP.今天我就整理一下 ...
- ZVulDrill渗透环境搭建及部分题目writeup
一 实验环境 0x01 ZvulDirll 0x02 下载地址https://github.com/redBu1l/ZVulDrill 二 配置安装 0x01 在你网站的根目录下创建一个Vu ...
- JDK8集合类源码解析 - ArrayList
ArrayList主要要注意以下几点: 1构造方法 2添加add(E e) 3 获取 get(int index) 4 删除 remove(int index) , remove(Objec ...
- nginx设置代理配置
server { listen 8086; resolver 8.8.8.8; location /{ ...
- python之Flask框架
一.简单的Flask框架 1)flask简介 Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序. 这个 wdb 应用程序可以使一些 we ...
- centos7 sqoop 1 搭建笔记
1.require : java环境,hadoop,hive ,mysql2.下载解压sqoop13.设置环境变量 export SQOOP_HOME=/data/spark/bin/sqoop ex ...
- 【转】手动释放linux os buff/cache
手动释放linux内存cache和脚本定时释放 标签: linuxcache脚本bufferwindows磁盘 2011-12-04 08:44 12799人阅读 评论(2) 收藏 举报 分类: l ...
- oracle unix时间戳与date转换
linux 时间戳 转date: 创建自定义函数: create or replace function unix_to_oracle(in_number number) return date ...