我是靠谱客的博主 无限大白,最近开发中收集的这篇文章主要介绍LeetCode 169. 多数元素题目:解析:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:

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

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

示例 1:

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


示例 2:

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

进阶:

尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

本题和leetcode 剑指 Offer 39. 数组中出现次数超过一半的数字 题目一样

解析:

本题常见的三种解法:

哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,即可找出 众数 。此方法时间和空间复杂度均为 O(N)O(N) 。
数组排序法: 将数组 nums 排序,数组中点的元素 一定为众数。
摩尔投票法: 核心理念为 票数正负抵消 。此方法时间和空间复杂度分别为 O(N)O(N) 和 O(1)O(1) ,为本题的最佳解法。

数学:

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

众数一定在排序后的最中间的位置

摩尔:

votes = 0
mode=0
for i in nums:
    if votes==0:
        mode=i
    if mode==i:
        votes=votes+1
    else:
        votes=votes-1
return mode

 

算法流程:

 

 

 哈希:

# Python3
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)

 哈希法利用第三方库

找到counts中数字最大的key

参考题解链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/solution/mian-shi-ti-39-shu-zu-zhong-chu-xian-ci-shu-chao-3/

最后

以上就是无限大白为你收集整理的LeetCode 169. 多数元素题目:解析:的全部内容,希望文章能够帮你解决LeetCode 169. 多数元素题目:解析:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部