Python 数组中的多数元素

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

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

示例 1:

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

示例 2:

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

需要寻找数组内的多数元素只需遍历数组后输出出现次数大于[n/2]的元素即可,但如果要遍历整个数组并且记录每个数出现的次数那么算法的时间复杂度将会达到O(n**2)甚至更高,这并不是一个最佳的解决方案。所以为了降低算法的时间复杂度我们可以采用下述算法。

算法逻辑

首先将arr中的第一个元素插入到tmp中进行初始化,随后从arr[1]开始遍历数组,若tmp中最后一个元素与arr[i]相等,则将arr[i]插入到tmp中,反之不一样则将tmp中的最后一个元素踢出tmp数组内

当tmp空时将arr[i]插入进来重复上述步骤,最后tmp内至少会有一个元素为出现次数最多的元素

代码实现

arr = 我们所输入的数组

tmp = 最后输出所用到的数组,初始为空

count = tmp数组的索引,初始为0且最小为0

第一步

做初始化,tmp数组默认为空,所以先将arr[0]插入到数组tmp中

arr = [2,2,1,1,1,2,2]
tmp = []
tmp.append(arr[0])
count = 0

第二步

遍历数组,从i = 1开始遍历,将tmp[count]与arr[i]做比较,

若相等,则将arr[i] 与 tmp[count]相等,则将arr[i]插入到tmp数组内,count索引向前进一位

若不相等,则将tmp[count]移除tmp数组内,count索引向后移动一位

当count == 0时count索引无法向后移动,可以选择把arr[i]赋予给tmp[count]

重复上述步骤最后输出tmp[0]即可

for i in range(1,len(arr)):
    if tmp[count] == arr[i]:
        tmp.append(arr[i])
        count += 1
    if tmp[count] != arr[i]:
        if count == 0:
            tmp[count] = arr[i]
        if count > 0:
            tmp.pop(count)
            count -= 1

完整代码


arr = [2,2,1,1,1,2,2]
tmp = []
tmp.append(arr[0])
count = 0
for i in range(1,len(arr)):
    if tmp[count] == arr[i]:
        tmp.append(arr[i])
        count += 1
    if tmp[count] != arr[i]:
        if count == 0:
            tmp[count] = arr[i]
        if count > 0:
            tmp.pop(count)
            count -= 1
print(tmp[0])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值