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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。 示例 1: 输入:...
    修行者12138阅读 366评论 0 0
  • 继续算法 题目:如果数组中多一半的数都是同一个,则称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回...
    名字是乱打的阅读 269评论 0 1
  • 题目: 数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。 示例: 输...
    WAI_f阅读 592评论 0 0
  • 1、题目描述 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你...
    hfk阅读 1,886评论 0 4
  • to-do:看一下别人写的题解 https://github.com/981377660LMT/algorithm...
    winter_sweetie阅读 781评论 1 0