利用hash表作为辅助空间降低时间复杂度

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

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

如果是每次遍历数组中的每个元素,再获取每个元素在数组中出现的次数,时间复杂度为O(n),
利用辅助空间对出现的次数进行存储,这里可以利用到Hash表,将存储和获取的复杂度降到O(1),最终的时间复杂度为O(1)

 public int MoreThanHalfNum_Solution(int [] array) {
        if (array == null || array.length ==0) {
            return 0;
        }
        //如果为1,直接返回数字
        if (array.length == 1) {
            return array[0];
        }
        HashMap<Integer,Integer> map = new HashMap<>(16);
        for (int i = 0; i < array.length; i++) {
            Integer value = map.get(array[i]);
            //不存在则新建,保存数值1
            if (value == null) {
                map.put(array[i],1);
            //获取上次的数值,并+1
            }else {
                map.put(array[i],value+1);
                if (value + 1 >= array.length/2+1) {
                    return array[i];
                }
            }
        }

        return 0;
    }
全部评论

相关推荐

群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
牛客773130651号:巨佬,简历模板换成上下的,左右的很烦,hr看着不爽。。。科大随便乱杀,建议能保研就保研,不行也得考一下 ,985硕去干算法,比开发强多了。开发许多双非都能搞,学历优势用不上,算法有门槛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务