算法:多数元素

多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

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

示例 1:

输入:[3,2,3]
输出:3

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2

进阶:

尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

leecode 链接

方法1

循环一下数组,把每个元素出现的次数做个统计,最后返回出现次数>n/2的

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    let obj = {}
    for (let i = 0; i < nums.length; i++) {
        let item = nums[i]
        if (!obj[item]) {
            obj[item] = 1
        } else {
            obj[item] += 1
        }
        if (obj[item] > nums.length /2 ) {
            return item;
        }
    }
};

算法:多数元素_第1张图片

方法2

下面我们来看一下更简单的做法

1.首先对数组进行排序
2.给定的数组总是存在多数元素,也就是说肯定有一个元素的个数大于数组长度的一半
3.所以数组长度/2为数组最中间的数就是多数元素了~

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    return nums.sort((a,b) => a-b)[Math.floor(nums.length/2)] 
    // 这里注意我们 sort 一定要按顺序排(即考虑到正负数),然后对n/2进行四舍五入操作
};

算法:多数元素_第2张图片

你可能感兴趣的:(算法,js,算法,leetcode,多数元素)