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
        }
    }
    
  • 相关阅读:
    Beta版使用说明
    【每日scrum】NO.7
    【每日scrum】NO.6
    【每日scrum】NO.5
    【每日scrum】NO.4
    【每日scrum】NO.3
    【每日scrum】NO.2
    【每日scrum】NO.1
    运行及总结
    测试与调试
  • 原文地址:https://www.cnblogs.com/zhongju/p/13790484.html
Copyright © 2011-2022 走看看