zoukankan      html  css  js  c++  java
  • [LeetCode] 169. Majority Element(主元素)

    Description

    Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

    给一个长度为 n 的数组,找到该数组的主元素。主元素是在数组中出现的次数大于 ⌊ n/2 ⌋ 的元素。

    You may assume that the array is non-empty and the majority element always exist in the array.

    你可以假设数组非空,且主元素一定存在。

    Examples

    Example 1

    Input: [3,2,3]
    Output: 3
    

    Example 2

    Input: [2,2,1,1,1,2,2]
    Output: 2
    

    Solution

    这题有个显而易见的做法就是统计每个数字出现的频率,然后找出频率最大的。这需要额外的空间记录这些频率信息。之前有看过另外一种只需要常数额外空间的解法,大致思路如下:

    1. 准备两个变量,一个记录结果,一个记录该结果对应的频率,初始时,设定第一个元素为结果,频率为 1。(题目假定数组非空,所以可以这么做)

    2. 遍历之后的元素,元素与结果相同,频率 +1,否则频率 -1。如果频率扣减至 0,则设置当前元素为结果并重置频率。

    3. 数组遍历完成后,最后的结果即为所求。

    代码如下:

    class Solution {
        fun majorityElement(nums: IntArray): Int {
            var result = nums[0]
            var count = 1
    
            for (i in 1..nums.lastIndex) {
                if (nums[i] == result) {
                    count++
                } else {
                    count--
                }
                if (count == 0) {
                    result = nums[i]
                    count = 1
                }
            }
            return result
        }
    }
    
  • 相关阅读:
    洛谷P3796
    cf1291c-Mind Control
    莫比乌斯函数
    C. Mixing Water(三分)
    E. Modular Stability(思维构造)
    【美团杯2020】平行四边形
    原根定义
    E. Are You Fired?(思维)
    102606C. Coronavirus Battle time limit per test4 seconds(三维拓扑序)
    E
  • 原文地址:https://www.cnblogs.com/zhongju/p/13790484.html
Copyright © 2011-2022 走看看