Leetcode: Majority Element

本文介绍了三种方法来解决数组中找到出现次数超过一半的元素的问题,包括排序、哈希表和优化后的哈希表方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

class Solution {
public:
    int majorityElement(vector<int> &num) {//method 1, sort
        sort(num.begin(), num.end());
		return num[num.size()/2];
    }
};

class Solution {
public:
    int majorityElement(vector<int> &num) {//method 2
        map<int, int> mp;
		map<int, int>::iterator it;
		for(int i = 0; i < num.size(); i++)
		{
			it = mp.find(num[i]);
			if(it == mp.end())
				mp[num[i]] = 1;
			else
				it->second += 1;
		}
		int max = mp.begin()->first;
		int maxcount = mp.begin()->second;
		for(it = mp.begin(); it != mp.end(); it++)
		{
			if(it->second > maxcount)
			{
				maxcount = it->second;
				max = it->first;
			}
		}
		return max;
    }
};

class Solution {
public:
    int majorityElement(vector<int> &num) {//method 2 optimize
        map<int, int> mp;
		map<int, int>::iterator it;
		for(int i = 0; i < num.size(); i++)
		{
			it = mp.find(num[i]);
			if(it == mp.end()){
				mp[num[i]] = 1;
				if(1 > num.size()/2)
					return num[i];
			}
			else{
				it->second += 1;
				if(it->second > num.size()/2)
					return it->first;
			}
		}
    }
};








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值