题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
思路:
数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现次数的和还要多。因此我们可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历...
分类:
编程语言 时间:
2015-05-26 23:29:03
阅读次数:
285
思路:保存数字中一个值和次数,当遍历到下个数字时,如果和保存数字相同次数加1,否则次数减1,当次数为0,则保存下一个数字,并把次数设为1,因为要找的数字次数超过一半,那么最后一个保存的数字一定就是要找的数字。public class MoreThanHalfNum {
/**
* 需找次数超过一半数字
* @param nums
* @param le...
分类:
编程语言 时间:
2015-05-24 11:38:40
阅读次数:
103
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
解法一:
先将数组排序,然后出现次数超过一半的数字就是a[n/2+1],时间复杂度O(nlgn)。
解法二:O(n)
基本思想:
消除原理:在遍历数组的时候保存两个值:一个...
分类:
编程语言 时间:
2015-04-30 14:23:07
阅读次数:
91
【题 目】数组中有一个数字的出现次数超过了该数组长度的一半,找出这个数字。 【思 路1】由于要寻找的数字的出现次数超过了数组长度的一半,所以如果将该数组排序,那么它的中位数必然是我们要寻找的数字,所以我们的任务就是对该数组进行排序,而性能最好的快速排序的时间复杂度为O(nlogn),我们可以直...
分类:
编程语言 时间:
2015-04-04 22:30:23
阅读次数:
257
??
《剑指Offer》P163
题目:找出数组中一个出现次数超过整个数组长度一般的数字
解法一:将原问题转化为求数组的中位数,采用快速排序的思想,每一次Partition取末位为哨兵,遍历将小于、大于哨兵的数分别移至哨兵左右,最后返回哨兵在处理后的数组中的位置。不断缩小要处理的数组的长度大小,最终确定返回值为数组长度一半的元素,即为中位数。
解法二:由...
分类:
编程语言 时间:
2015-03-17 10:33:19
阅读次数:
159
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
看到这个题目,我自己想到的方法:
另外申请一个数组B,用来存放该数组A 元素出现的次数,再遍历B数组,出现次数最多的就是;但是这个如果A数组当中的元素有个是1000,那么B数组就要申...
分类:
编程语言 时间:
2014-12-26 14:47:30
阅读次数:
237
题目1370:数组中出现次数超过一半的数字
时间限制:1 秒内存限制:32 兆特殊判题:否提交:2844解决:846
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
输入:
每个测试案例包括2行:
第一行输入一个整数n(1<=n<=100000...
分类:
编程语言 时间:
2014-12-09 12:16:13
阅读次数:
147
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2出现了5次,超过数组长度的一半,因此输出2.分析:最直接方法,先对数组进行排序,然后统计每个数出现的次数就可以找出该数字。时间复杂度为O(nlogn)..
分类:
编程语言 时间:
2014-12-04 16:00:42
阅读次数:
282
输入:一个数组.输出:数组中出现次数超过一半的数字.注:如果该数字不存在,则需对该数组进行检查,下面的程序假设所要查找的数字是存在的. 1 #include 2 #include 3 4 static int find(int *, int); 5 6 int main(int argc, ...
分类:
编程语言 时间:
2014-10-16 17:20:43
阅读次数:
231
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
解法1:将数组利用快速排序进行排序,因为数组中有一个数字出现的次数超过了数组长度的一半,则排序以后直接取得最中间的那个数字即可!
时间复杂度为:o(n*logN),因为时间主要花费在快速排序上面了!
public static int find1(int[] a) {
Arrays.sort(a);
int mi...
分类:
其他好文 时间:
2014-09-23 21:21:55
阅读次数:
213