zoukankan      html  css  js  c++  java
  • LeetCode主要元素Swift

    数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(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(1) 

        func majorityElement(_ nums: [Int]) -> Int {
            let arr = nums
            var counts: [Int: Int] = [:]
            for item in arr {
                counts[item] = (counts[item] ?? 0) + 1
            }
            for (key, value) in counts {
                if value > nums.count / 2 {
                    return key
                }
            }
            return -1
        }

    解法二:摩尔投票算法,计数器 n = 1, 主要元素 value 取数组第一个。 先遍历数组,找出投票数最高的某个数 value (遍历数组时,若相同就加一,若不同就减一,当计数器为0时,重置计数器和主要元素),然后遍历数组,找出 value 的总个数。

        func majorityElement(_ nums: [Int]) -> Int {
            var n = 1
            var value = nums[0]
            for i in 1..<nums.count {
                if nums[i] == value {
                    n += 1
                } else {
                    n -= 1
                }
                
                if n == 0 {
                    n = 1
                    value = nums[i]
                }
            }
            if n > 0 {
                var s = 0
                for num in nums {
                    if num == value {
                        s += 1
                        if s > nums.count/2 {
                            return value
                        }
                    }
                }
            }
            return -1
        }

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/find-majority-element-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    Enhancing State-of-the-art Classifiers with API Semantics to Detect Evolved Android Malware论文阅读笔记
    this和super的总结
    软件工程结对WordCount项目
    软工个人作业 数独
    问题
    自我介绍
    shuduku
    access to DeepLearning
    自我介绍
    学习软工基目标
  • 原文地址:https://www.cnblogs.com/huangzs/p/14990461.html
Copyright © 2011-2022 走看看