前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-面试题39-数组中出现次数超过一半的数字

LeetCode-面试题39-数组中出现次数超过一半的数字

作者头像
benym
发布2022-07-14 15:15:42
1310
发布2022-07-14 15:15:42
举报
文章被收录于专栏:后端知识体系后端知识体系

# LeetCode-面试题39-数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

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

示例:

代码语言:javascript
复制
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

限制:

1 <= 数组长度 <= 50000

# 解题思路

方法1、投票法:

把众数的票数记为+1,非众数票数记为-1,如果众数出现的次数超过数组长度的一般,则一定会有所有的数字的票数和>0

方法2、哈希Map

空间换时间,没有出现在map中的数添加进去,出现过了则次数+1,之后获取次数最大的key即可

# Java代码

代码语言:javascript
复制
class Solution {
    public int majorityElement(int[] nums) {
        if(nums==null||nums.length==0)
            return 0;
        int result = nums[0];
        int times = 1;
        for(int i=1;i<nums.length;i++){
            if(times==0){
                result = nums[i];
                times = 1;
            }
            else if(nums[i]==result)
                times++;
            else
                times--;
        }
        return result;
    }
}

# Python代码

代码语言:javascript
复制
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        if not nums: return 0
        numsMap = {}
        for i in nums:
            if i not in numsMap:
                numsMap[i]=1
            else:
                numsMap[i]+=1
        return max(numsMap,key=numsMap.get)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # LeetCode-面试题39-数组中出现次数超过一半的数字
    • # 解题思路
      • # Java代码
        • # Python代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档