美文网首页
LeetCode 主要元素

LeetCode 主要元素

作者: 吴敬悦 | 来源:发表于2021-03-28 23:39 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/jicvhltx.html