169. 求众数(Python)

题目

难度:★☆☆☆☆
类型:数学

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例

示例 1:
输入: [3,2,3]
输出: 3

示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2

解答

方案1:字典(哈希表)

为了找到出现次数最多的数,最简单的逻辑就是统计每次数字出现的次数,再拿取出其中出现次数最多的数字。该方法道理简单,但是内存开销较大。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        count = {}
        for num in nums:                                                # 统计每个数字出现的次数
            if num in count:
                count[num] += 1
            else:
                count[num] = 1
        return {v: k for k, v in count.items()}[max(count.values())]    # 字典键值反转,找到出现次数最多的数字

方案2:数字统计

这道题目所求的众数的定义与常规概念不同的是,这里众数的出现次数要比数组中其他所有元素要多的,根据这个原理,我们将结果变量(res)初始化为数组第一个数,另外准备一个统计变量(count),当这个变量遇到和结果相同的数则加一,否则减一,减为零时更换结果变量为下一个数,由于众数出现次数多于其他字符,那么数组遍历结束后统计变量一定大于零,且此时结果变量中的数即为众数。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        count, res = 0, nums[0]         # 初始化计数器和结果
        for i in range(len(nums)-1):    # 遍历数组中每一个数
            if nums[i] == res:          # 如果当前的数和结果变量相同
                count += 1              # 计数器+1
            else:                       # 否则
                count -= 1              # 计数器-1
                if count == 0:          # 如果减到了0
                    res = nums[i+1]     # 那么更新结果变量为下一个数
        return res                      # 返回结果

方案3:排序

这里众数的的出现次数超过其他元素,因此我们将数据进行排序后,最中间的数字一定是众数。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """

        nums.sort()
        return nums[len(nums) // 2]

如有疑问或建议,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • GIthub简书CSDN 题目 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/...
    MaosongRan阅读 4,434评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,848评论 6 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,706评论 0 2
  • 按照用途分类出以下统计函数: AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该函数可以评测数据(例...
    四方院祭司阅读 8,009评论 0 3
  • 1. 简述相关分析和回归分析的区别和联系。 回归分析和相关分析都是研究两个或两个以上变量之间关系的方法。 广义上说...
    安也也阅读 12,879评论 0 3