leetcode-169. 求众数

169. 求众数

题目描述

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

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

示例 1:

输入: [3,2,3]
输出: 3

示例 2:

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

思考

我的确靠着分治,是没有想出来该如何解决这个问题,主要是最后的基本的比较该如何写。
然后看了网上的,比较厉害就是。在进入函数的列表,即使有递归调用,但是函数返回后其本身的数组,在此时是一个东西,也就是可以用遍历比较左右两边哪个众数出现的次数更多。
给出博客地址:地址

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        #
        if len(nums) == 0:
            return None
        if len(nums) == 1:
            return nums[0]
        else:
            mid = len(nums) // 2
            u = nums[:mid]
            v = nums[mid:]
            left = self.majorityElement(u)
            right = self.majorityElement(v)
            if left == right:
                return left
            else:
                left_count = right_count = 0
                for i in nums:
                    if i == left:
                        left_count = left_count + 1
                    elif i == right:
                        right_count = right_count + 1
                if left_count > right_count:
                    return left
                else:
                    return right

结果:

方法二

提交后,可以查看别人提交过得代码。这里我随便看了一个。
比较好,就是使用python的集合来封装,然后判断出现的次数是否过半。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return None
        if len(nums) == 1:
            return nums[0]
        else:
            dic = {}
            # 封装
            for i in nums:
                dic[i] = dic.get(i, 0) + 1 # 如果没有,返回次数value=0,否则返回value
            # 求次数最多的
            for i in dic:
                if dic[i] > len(nums) // 2:
                    return i
            return None

结果:


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element


   Reprint policy


《leetcode-169. 求众数》 by 梦否 is licensed under a Creative Commons Attribution 4.0 International License
 Previous
leetcode-240. 搜索二维矩阵 II leetcode-240. 搜索二维矩阵 II
240. 搜索二维矩阵 II题目描述编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例: 现有矩阵 matrix 如下:
2019-09-21
Next 
leetcode-23. 合并K个排序链表 leetcode-23. 合并K个排序链表
23. 合并K个排序链表题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2
2019-09-16
  TOC