zoukankan      html  css  js  c++  java
  • 每日一题20201106(169. 多数元素)

    image.png

    hash表

    1. 思路很简单,先遍历数组,存储每个元素的个数
    2. 遍历hash表,拿到大于 n/2的数字,直接return
    
    class Solution:
        def majorityElement(self, nums: List[int]) -> int:
            hash = dict()
            for n in nums:
                if n not in hash:
                    hash[n] = 1
                else:
                    hash[n] += 1
            for k, v in hash.items():
                if v > len(nums) / 2:
                    return k
            return -1
    
    

    时间复杂度: O(N)
    空间复杂度: O(N)

    投票算法

    思路很简单,假设你是秦始皇,数组里面有很多其他国家,你们秦兵遇到自己人就+1,遇到其他人就-1,如果你超过了所有国家一半的兵力,那么最后活下来的肯定就是你的士兵。这里之所以能这么确定,是因为题目强调了一定存在多数元素!
    
    代码思路是,开始遍历数组,如果当前的士兵数量是0,则把当前士兵设置为遍历到的元素,比如: 秦
    
    接下来如果遇到秦,则count+1, 遇到的是赵或者其他士兵,则秦和赵士兵同归于尽。下一轮遍历,由于秦的count是0了,则将当前士兵设置为遍历到的士兵。
    
    class Solution:
        def majorityElement(self, nums: List[int]) -> int:
            if len(nums) == 0:
                return -1
            # 当前士兵数量
            count = 0
            # 当前士兵
            current = None
            for n in nums:
                if count == 0:
                    current = n
                count += 1 if n == current else -1
            return current
    
    

    时间复杂度: O(N)
    空间复杂度: O(1)

  • 相关阅读:
    (转)运行pip报错:Fatal error in launcher: Unable to create process using '"'
    (转)pycharm autopep8配置
    Hash
    Java 8 Lambda表达式
    位运算
    PHP数组操作大全
    php final static const成员属性用法
    Java编程性能优化
    java中double变量保留小数问题
    encodeURIComponent编码后java后台的解码
  • 原文地址:https://www.cnblogs.com/we8fans/p/14010841.html
Copyright © 2011-2022 走看看