page contents

python基础编程100例:第91期-基础技巧:计数 多数元素

本文讲述了python基础编程100例:第91期-基础技巧:计数 多数元素!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-04-iDLvs7F8624b98e6286c3.png

本文讲述了python基础编程100例:第91期-基础技巧:计数 多数元素!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第91期-基础技巧:计数 多数元素

1 问题描述

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

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


示例 1:

输入: [3,2,3]

输出: 3


示例 2:

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

输出: 2


初始代码


from typing import List

class Solution:

    def majorityElement(self, nums: List[int]) -> int:

        #在此之间填写代码


print(Solution().majorityElement([3,2,3]))

print(Solution().majorityElement([2,2,1,1,1,2,2]))


2 解题思路

标签:计数

思路:摩尔投票法

也可以使用哈希表统计,但是这种方式空间复杂度较高。摩尔投票法空间复杂度较低。

摩尔投票法的思路:相同的数字count+1,不同的数字count-1,因为众数>n/2,所以剩到最后的就是众数


3 解题方法

from typing import List

class Solution:

    def majorityElement(self, nums: List[int]) -> int:

        candidate = nums[0]

        count = 1

        for i in range(1, len(nums)):

            if candidate == nums[i]:

                count += 1

            else:

                if count == 0:

                    candidate = nums[i]

                    count = 1

                else:

                    count -= 1

        return candidate


print(Solution().majorityElement([3,2,3]))

print(Solution().majorityElement([2,2,1,1,1,2,2]))

第1-3,17-18行: 题目中已经给出的信息,运行代码时要根据这些代码进行编辑

第4行: 定义变量candidate并暂时存放nums中的第一个元素

第5行: 定义变量count并赋值为1,用于记录数量

第6行: 使用for循环变量nums中的所有元素

第7-8行: 若当前索引对应的值与candidate的值相等,则count值加一

第9行: 若不相等,则进行下列操作:

第10-12行: 判断count是否等于0,若等于0,则重新定义candidate值为当前索引对应元素,且count值重新等于1

第13-14行: 若不等于0,则count值减一

第15行: 返回candidate,则nums中的多数元素


代码运行结果为:

attachments-2022-04-zqMTNY4Z624b98a676e8f.png

技巧讲解

这里用到了基础技巧:计数:摩尔投票法,简单讲解下这个技巧:

摩尔投票法

摩尔投票法的基本思想很简单,在每一轮投票过程中,从数组中找出一对不同的元素,将其从数组中删除。

这样不断的删除直到无法再进行投票,如果数组为空,则没有任何元素出现的次数超过该数组长度的一半。

如果只存在一种元素,那么这个元素则可能为目标元素。

那么有没有可能出现最后有两种或两种以上元素呢?

根据定义,这是不可能的,因为如果出现这种情况,则代表我们可以继续一轮投票。

因此,最终只能是剩下零个或一个元素。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-vLBIqnzt62908301b7613.jpeg

  • 发表于 2022-04-05 09:18
  • 阅读 ( 609 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1490 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章