LeetCode 169. 多数元素 Majority Element

简介: LeetCode 169. 多数元素 Majority Element

LeetCode 169. 多数元素 Majority Element


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告

一、中文版

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

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

示例 1:

输入: [3,2,3]

输出: 3

示例 2:

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

输出: 2

二、英文版

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处

三、My answer

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        n = len(nums) // 2
        dict_ = {}
        for num in nums:
            if num in dict_:
                dict_[num] += 1
            else:
                dict_[num] = 1
        for key in dict_:
            if dict_[key] > n:

四、解题报告

我的算法很简单,遍历数组,将数组中数字 num 及 num 出现的个数存到字典中,再遍历字典找出 value 值大于 n/2 的 key 即可。

注意 Python 中 // 除法已经是取地板,而 / 表示 float 型,精确到小数的除法。

此外有两个版本的代码值得学习:

class Solution:
    def majorityElement(self, nums):
        counts = collections.Counter(nums)
        return max(counts.keys(), key=counts.get)
# 作者:LeetCode-Solution
# 链接:https://leetcode-cn.com/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/

上述方法是 LeetCode 的官方解法,学到了 Counter() ,更见识到了 max() 的方法,准备单独整理一篇博客讲 max() 的用法。

class Solution:
    def majorityElement(self, nums):
        majority_count = len(nums)//2
        for num in nums:
            count = sum(1 for elem in nums if elem == num)
            if count > majority_count:
                return num

上述代码在 http://www.yidianzixun.com/article/0OKPjsSp 中看到,觉得该方法中 count 的求法很是巧妙。虽然该算法时间复杂度为 O(n^2) 会超时,但仍然止不住我对它的喜爱,链接中还有很多其他的经典算法,如果感兴趣可以去学习。

不知道引用链接是否算侵权,如果原作者觉得不妥,三妹立马删掉哈。

相关文章
|
11月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
123 1
|
5月前
|
机器学习/深度学习 存储 算法
【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 347——前 K 个高频元素的三种解法:哈希表+小顶堆、哈希表+快速排序和哈希表+桶排序。每种方法都附有清晰的思路讲解和 Go 语言代码实现。小顶堆方法时间复杂度为 O(n log k),适合处理大规模数据;快速排序方法时间复杂度为 O(n log n),适用于数据量较小的场景;桶排序方法在特定条件下能达到线性时间复杂度 O(n)。文章通过对比分析,帮助读者根据实际需求选择最优解法,并提供了完整的代码示例,是一篇非常实用的算法学习资料。
341 90
|
11月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
105 0
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
11月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
83 0
|
11月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
82 0
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
102 2
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
139 0