LeetCode 主要元素

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。

示例 1:

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

示例 2:

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

示例 3:

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

说明:

  • 你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?

我的算法实现:

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
  // 数组的长度
  const len = nums.length
  // 保存主要元素的界限
  const limitCount = Math.floor(len / 2)
  // 将元素的值转换成 map ,其中 key 为对应的值, value 为出现个数
  const numsObj = {}
  for (let i = 0; i < len; i++) {
    const num = nums[i]
    numsObj[num] = (numsObj[num] || 0) + 1
    // 如果增加达到了界限,那么就直接返回这个值
    if (numsObj[num] > limitCount) {
      return num
    }
  }
  return -1
};

这个算法主要是使用了 map 的方式,思路也比较清晰,就是记录相同元素的个数,并实时查看当前元素出现的个数,如果发现有超过的,就直接返回,这样不要想着有多种情况,超过半数以上元素有且仅有一个。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-majority-element-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode 主要元素)