剑指offer-python刷题-数组中出现次数超过一般的数字
发布日期:2021-07-28 12:03:10 浏览次数:3 分类:技术文章

本文共 900 字,大约阅读时间需要 3 分钟。

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000


这个题目看完,我觉得应该是建立两个列表,分别存储原数组中不同的元素和每个元素出现的次数。

# -*- coding:utf-8 -*-class Solution:    def MoreThanHalfNum_Solution(self, numbers):        # write code here        #给定列表中元素后,返回该元素在列表中的索引值        def find_index(array_1,b):            for i in range(len(array_1)):                if array_1[i] == b:                    return i        number_diff = []        number_num = []        for i in numbers:            if i in number_diff:                number_num[find_index(number_diff,i)] += 1            else:                number_diff.append(i)                number_num.append(1)        if max(number_num) > sum(number_num)/2:            return number_diff[find_index(number_num,max(number_num))]

讨论区找到的新方法:由于题目中有限定条件,这样一个出现次数超过数组长度一半的元素在排序之后,数组中的中位数一定是这个要寻找的元素。

 

 

转载地址:https://blog.csdn.net/sinat_42437278/article/details/117391201 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:剑指offer-python刷题-连续子数组的最大和
下一篇:剑指offer-python刷题-包含min函数的栈

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月15日 07时46分24秒