题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现5次,超过数组长度的一半,因此输出2....
分类:
编程语言 时间:
2015-08-08 19:54:07
阅读次数:
134
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
解题思路
出现超过一半的数,一定是排好序的数组的中位数,即位置为 n/2 的数。
找到这个中位数,然后,遍历一次,判断是否出现次数超过一半,若是,则返回true,否则,没有这...
分类:
编程语言 时间:
2015-07-29 10:17:51
阅读次数:
126
题目描述:http://ac.jobdu.com/problem.php?pid=1370
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。直观想法是,先排序O(nlgn),那么下标是 n/2 的位置上一定是超过数组长度一半的数字。另一种思路是:
用快排里...
分类:
编程语言 时间:
2015-07-27 19:07:30
阅读次数:
99
也就是说该数字出现的次数比其他所有数字出现次数的和还要多。因此可以保存两个值,一个数字,一个次数。遍历时1、如果数字相同,count++2、如果count == 0 count = 1 number替换 3、如果不相同 count--int main(){ int array[] = {...
分类:
编程语言 时间:
2015-07-21 23:46:05
阅读次数:
152
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:1、方法1:先排序,然后找中位数;时间复杂度O(nlogn)2、方法2:基于Partition函数...
分类:
编程语言 时间:
2015-07-20 21:11:12
阅读次数:
159
过程:
int MoreThanHalfNum(int* numbers, int length)
{
if (CheckInvalidArray(numbers, length))
return 0;
int middle = length >> 1;
int start = 0;
int end = length - 1;
int index = Partition(numbe...
分类:
编程语言 时间:
2015-07-09 18:02:10
阅读次数:
136
题目:数组中一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9 的数组{1,2,3,2,2,2,5,4,2}。由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2. 这道题很多人都会想到对这个数组进行排序。那么在已排序的数组中,位于中间位置的数字就是超过数...
分类:
编程语言 时间:
2015-07-07 21:14:18
阅读次数:
170
//统计数组中出现次数超过一半的数字
#include
int Find(int *arr, int len)
{
int num = 0; //当前数字
int times = 0; //当前数字出现的次数
int i = 0;
for (i = 0; i<len; i++)
{
if (times == 0)
...
分类:
编程语言 时间:
2015-07-07 17:02:39
阅读次数:
124
题目:数组中有一个数字的次数超过数组长度的一半,请找出这个数字。解法一:基于Partition函数的O(N)算法 1 int partition(vector&num, int low, int high) 2 { 3 int pivot = num[low]; 4 while (l...
分类:
编程语言 时间:
2015-07-04 20:59:57
阅读次数:
172
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
解题思路:
解法一:基于Partition 函数的O(n)算法
解法二:根据数组组特点找出O(n)的算法...
分类:
编程语言 时间:
2015-07-03 09:14:29
阅读次数:
143