229. 多数元素 II

Posted 心脏dance

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了229. 多数元素 II相关的知识,希望对你有一定的参考价值。

题目链接:力扣

思路:数据大于floor(n/3)向下取整的数最多只有两个(仔细想想),或者1个,或者没有。这样的话就采取类似最近很火的游戏“羊了个羊”消除,当然区别就是我们槽位只有2个,点击第三个的时候只有不一样这三个才会同时消除,如果相同就叠在对应的槽位上,这样最后剩下的两个槽位上面的值才有可能大于floor(n/3),为什么说有可能,因为存在一种特殊情况:【3,2,3】,这种情况下通过我们的算法最后会出现,第一个槽位剩下3,第二个槽位剩下2,但是只有3是满足的,所以最后我们再把这两个值验证一下即可。别的能消除的一定不会大于floor(n/3),因为消除的是三个不一样的数。

两次for循环,所以时间复杂度为O(n)。

空间上面我们只开了几个变量,所以时间复杂度O(1)。

上代码:

class Solution 
    fun majorityElement(nums: IntArray): List<Int> 
        val count = nums.size / 3
        var numOne: Int? = null
        var numTwo: Int? = null
        var numOneCount = 0
        var numTwoCount = 0
        nums.forEach  x ->
            when (x) 
                numOne -> numOneCount++
                numTwo -> numTwoCount++
                else -> 
                    when (null) 
                        numOne -> 
                            numOne = x
                            numOneCount++
                        
                        numTwo -> 
                            numTwo = x
                            numTwoCount++
                        
                        else -> 
                            numOneCount--
                            if (numOneCount == 0) numOne = null
                            numTwoCount--
                            if (numTwoCount == 0) numTwo = null
                        
                    
                
            
        
        numOneCount = 0
        numTwoCount = 0
        nums.forEach  x ->
            when 
                numOne != null && x == numOne -> numOneCount++
                numTwo != null && x == numTwo -> numTwoCount++
            
        
        val list = mutableListOf<Int>()
        if (numOneCount > count) numOne?.let  list.add(it) 
        if (numTwoCount > count) numTwo?.let  list.add(it) 
        return list
    

以上是关于229. 多数元素 II的主要内容,如果未能解决你的问题,请参考以下文章

题目地址(229. 多数元素 II)

[LeetCode] 229. Majority Element II 多数元素 II

229. 多数元素 II

229. 多数元素 II

leetcode-Majority Element II-229

LeetCode 229 Majority Element II(主要元素II)(Array)(Boyer–Moore majority vote algorithm)