算法:多数元素(排序和Boyer Moore投票算法)

2023-12-13 05:44:10

排序?时间复杂度 O(nlog?n) 空间复杂度 O(log?n)

/**

 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
    nums = nums.sort()
    // 排序之后数组中间的数一定是众数(因为题目说数组中的众数大于 ?nums.length/2?)
    return nums.find(item=>item==nums[Math.floor(nums.length/2)])
};

Boyer Moore投票算法?时间复杂度?O(n) 空间复杂度?O(1)?

/**

 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
    // 初始化计数器和数量最多的数
    let count = 0;
    let candidate = null;
    for (let item of nums) {
        // 如果计数器归零说明之前数量最多的数被后来最多的数给顶掉了
        if (count === 0) {
            candidate = item;
        }
        // 如果当前的数等于当前数量最多的数计数器+1
        // 否则-1
        if (item === candidate) {
            count++;
        } else {
            count--;
        }
    }
    return candidate;
};

文章来源:https://blog.csdn.net/sdhshsjh/article/details/134962091
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。