Leetcode - 169求众数

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];
    }
};

然后我们提交代码,这个题就做出来了。
Leetcode - 169求众数
学会换个角度分析问题,熟练地掌握STL,有时候题目就是这么简单。