169. 多数元素

79 阅读1分钟

题目 leetcode.cn/

  • 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
  • 你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例

  • 输入: nums = [3,2,3], 输出: 3
  • 输入: nums = [2,2,1,1,1,2,2], 输出: 2

提示

  • n == nums.length
  • 1 <= n <= 5 * Math.pow(10, 4)
  • -Math.pow(10, 9) <= nums[i] <= Math.pow(10, 9)

思路

  • 数组长度为n, 其中多数元素的出现次数大于n / 2,说明多数元素的个数占整个数组的一半还要多
  • 可以先给数组排序(升序或者降序都可以), 多数元素一定在排序完的数组中间,返回该元素即可
  • 注意:
    • 当数组长度为1时,多数元素就是数组的唯一元素
    • 数组长度可能为奇数,所以取下标的时候需要取整,为了省略判断数组长度为1的情况,这里向下取整

代码

function majorityElement(nums: number[]): number {
    let nums2 = nums.sort((a, b) => { return a -b });
    return nums2[Math.floor(nums.length / 2)];
};

或者

function majorityElement(nums: number[]): number {
    let nums2 = nums.sort((a, b) => { return a -b });
    return nums2[Math.ceil(nums.length / 2) - 1];
};

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