Leetcode - 169求众数

博客围绕169求众数问题展开,给定数组找出现次数大于 ⌊ n/2 ⌋ 的众数。分析指出排序后众数会在数组中间位置,可调用C++的algorithm库中的sort函数完成排序。该函数结合多种排序方法,无需考虑数组大小,提交代码即可解题。

169 求众数

题目描述

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2

题目给出的接口为:
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        
    }
};
题目分析

如果是出现次数大于数字数量一半的话,那么不管这个众数之前在数组中的位置如何,排序之后一定会出现在数组中间的那个位置。
那么我们的问题就变得简单了,我们只需要完成排序就好。
排序方法那么多,哪种最合适啊?
这里我特意百度了一下,发现Leetcode是完全支持C++的STL的,并且需要用的头文件都已经写好了。那么我们直接去调用C++的algorithm库中的sort函数就好了。

这里要说明一下:

STL中的sort并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。

所以说使用了sort函数,我们就可以不用考虑数组的大小了。

代码如下:
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        return nums[nums.size()/2];
    }
};

然后我们提交代码,这个题就做出来了。
在这里插入图片描述
学会换个角度分析问题,熟练地掌握STL,有时候题目就是这么简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿扬来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值