题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

方法一 投机取巧法(参考官解)

并且给定的数组总是存在多数元素。

根据这句话,我假定必定存在,数组中出现次数超过一半的数字。那我只要将它排序,再把中间值返回即可。

import java.util.Arrays;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
       Arrays.sort(array);
       return array[array.length/2];  
    }
}

方法二 哈希法

首先要注意题目的数据范围。1<=数组长度<=50000,0<=数组元素<=10000。

我建立一个数组temp,存放数字出现的次数。1的次数就存放在temp[1],2的次数就存放在temp[2]。最后遍历temp,下标就是数值,返回即可。

int temp[] = new int[10000];
        for(int i=0;i<array.length;i++){
            temp[array[i]]++;
        }
        int maxCount = 0;
        int maxCountValue = 0;
        for(int i=0;i<temp.length;i++){
            if(temp[i]>maxCount) {
                maxCount = temp[i];
                maxCountValue = i;
            }
        }
        return maxCountValue;
全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务