Leetcode刷题25-169.求众数(C++)

本文详细解析了LeetCode上的经典题目“求众数”,介绍了问题描述、个人解决方案及高效率算法。通过对比排序法与Boyer-Moore投票算法,深入探讨了众数查找的最优实践。

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

题目来源:链接: [https://leetcode-cn.com/problems/majority-element/].

1.问题描述

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

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

示例1:

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

注意:

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

2.我的解决方案

很常规的排序后取中间的元素找出众数。
代码如下:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        
        sort(nums.begin(), nums.end());
        int len = nums.size()/2;
        if(len == 1 || len == 0)
        {
            return nums[len];
        }
        if( nums[len] == nums[len + 1] )
        {
            return nums[len + 1];
        }
        else
        {
            return nums[len];
        }
    }
};

3.大神们的解决方案

感觉我的sort排序 比较浪费时间,虽然我的代码简洁一点,但是速度慢了。

static const auto io_sync_off = []()
{
    // turn off sync
    std::ios::sync_with_stdio(false);
      std::cin.tie(nullptr);
    return nullptr;
}();  // untie in/out streams

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int same=nums[0],sum=0;
        for(int i=0;i<nums.size();i++){
            if(sum==0){
                same=nums[i];
            }
            if(same==nums[i]){
                sum++;
            }else{
                sum--; 
            }
            
        }
        return same;
    }
};

4.我的收获

待补,先回去睡觉啦。。。
今天的 任务完成的差不多了、、、

2019/3/16 胡云层 于南京 25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值