1. 数组中出现次数超过一半的数字
复杂度O(n)的解法
思路1:(不改变原数组的顺序)出现次数超过数组长度的一半,说明它出现的次数比数组中所有元素出现的次数和还要多
因此可以在遍历的时候保存两个值,一个是数组中的数字value,一个是次数
(1)与前一个数字相同时,times++
(2)与前一个数字不同时,times--
(3)当times为0时,value重新赋值为当前的元素,并将times设置为1
思路2:(会改变原数组的顺序)
---寻找数组的中位数
出现次数超过数组长度的一半的数字一定是数组的中位数,利用快速排序的思想:
(1)在数组中随机找一个数,将小于它的数放在他的左边,大于它的数放在他的右边
(2)如果这个数的下标刚好是size/2,那么他就是数组的中位数
(3)否则,如果他的下标<size/2,中位数在它的右边,>size/2中位数在它的左边
(4)递归在它的左边或右边部分进行查找
---判断中位数的出现次数是否大于数组长度的一半
遍历一遍数组,统计中位数的出现次数,判断是否超过长度的一半