面试题39. 数组中出现次数超过一半的数字

地址:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/

<?php

/**
面试题39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
 */

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function majorityElement1($nums) {
        $arr = array_count_values($nums);
        $count = ceil(count($nums)/2);
        foreach ($arr as $k=> $v){
            if ($v >= $count){
                return $k;
            }
        }
    }

    /**
    超过一半得数量的数字必然位于中间,所以排序后取中位数即可
     */
    function majorityElement($nums){
        sort($nums);
        $mid = intval(count($nums)/2) >>1;
        return $nums[$mid];
    }
}

$soluition = new Solution();
$nums = [6,5,5];
var_dump($soluition->majorityElement($nums));

 

posted @ 2020-05-15 16:14  花花妹子。  阅读(106)  评论(0编辑  收藏  举报