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

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

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

    public int MoreThanHalfNum_Solution(int [] array) {
        //方法1 遍历 放到map中,计数,再遍历map  计数大于一半就是。 空间O(n)
        //方法 2 排序 或者 +二分法 时间o(n2)
        //这两种方法都不满足题目要求的时间 空间复杂度
        //选择插入排序 最好的情况是 O(N) 虽然用Map最好的情况空间复杂度可以忽略不计
        if(array == null){
            return 0;
        }
        for(int i = 1;i< array.length;i++){
            int value = array[i];
            int j = i - 1;
            for(;j>= 0;j--){
                if(value < array[j]){
                    array[j + 1] = array[j];
                }else{
                    break;
                }
            }
            array[j+1] = value;
        }
        
        int midNum = array[array.length / 2];
        int count = 0;
        for(int item : array){
            if(item == midNum){
                count ++;
            }
        }
        if(count > array.length / 2){
            return midNum;
        }
        return 0;
    }
}
全部评论

相关推荐

浪子陪都:简历最优秀的地方放到了后面,国奖,校级奖学金这些是最亮眼的。说明你跟同级别的学生不一样。 建议台灯这个,PCB布局布线这个词汇不专业,业内是PCB Layout,第二,单片机的板子一般不用考虑SI,PI 都是低速信号,只要遵循3W原则就好了。 单片机的项目太low了,技能这块,你要看一下BOSS直聘的招聘要求,按照别人的要求写,一些关键词可以增加你简历被检索到的概率。 主修课程不用写,这个没有人去关注的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务