169. Majority Element
来源:互联网 发布:网络诈骗300元立案吗 编辑:程序博客网 时间:2024/05/18 14:44
问题描述:
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.
给一个长为n的数组,找到该数组的众数。众数是指数组中出现超过n/2次的元素。假设数组不为空且数组存在众数。
问题解决:
运用分治算法
每次把数组分成前后两部分,分别找到前后两部分的众数
若都有众数且众数相同,则该数就是整个数组的众数;
若前部分有众数或者后部分有众数,则遍历整个数组,计算其出现的次数是否超过n/2,是则返回该数;
若还是找不到众数,则数组无众数,返回一个相对比较偏僻的数字-10000
如上递归下去,当数组长度缩小为1时,数组中的唯一的数就是该数组的众数
代码如下:
class Solution {
public:
int majorityElement(vector<int>& nums) {
vector<int>::iterator iter1;
int len = nums.size();
//若长度为1,则数组里的数字就是该数组的众数
if(len == 1) {
return *nums.begin();
} else {
vector<int> f, b;
int i = 0;
//新建两个子数组,分别存当前数组的前半部分和后半部分
for(iter1=nums.begin(); i < len/2; iter1++, i++) {
f.push_back(*iter1);
}
for(; iter1!=nums.end(); iter1++) {
b.push_back(*iter1);
}
//递归求子数组的众数
int fM = majorityElement(f);
int bM = majorityElement(b);
//若众数相同,返回
if(fM == bM) {
return fM;
}
int numf = 0, numb = 0;
//若前半部分有众数,计算其出现的次数
if(fM != -10000) {
for(iter1=nums.begin(); iter1!=nums.end(); iter1++) {
if(*iter1 == fM) {
numf++;
}
}
//若出现超过n/2则返回
if(numf > len/2) return fM;
}
//若后半部分有众数,计算其出现的次数
if(bM != -10000) {
for(iter1=nums.begin(); iter1!=nums.end(); iter1++) {
if(*iter1 == bM) {
numb++;
}
}
//若出现超过n/2则返回
if(numb > len/2) return bM;
}
//找不到则返回-10000
return -10000;
}
}
};
- 169.Majority Element && 229. Majority Element II
- [LeetCode]169.Majority Element
- LeetCode 169.Majority Element
- 【LeetCode】169.Majority Element
- LeetCode 169. Majority Element
- LeetCode 169. Majority Element
- 169.Majority Element
- [leetcode] 169.Majority Element
- 169. Majority Element
- Leetcode 169. Majority Element
- 【LeetCode】169. Majority Element
- [LeetCode]169. Majority Element
- 169. Majority Element LeetCode
- 169. Majority Element
- 169. Majority Element
- LeetCode 169. Majority Element
- LeetCode 169. Majority Element
- Leetcode 169. Majority Element
- Android快速开发系列 10个常用工具类
- (一)操作系统概论复习要点笔记
- 论文浅海矢量声场及其信号处理的学习
- 8种常用内部排序
- python3 库文件的安装
- 169. Majority Element
- 国庆中秋福利篇:视频资料免费大派送,总有你想要的那款
- c++类所占内存总结
- CentOS安装过程中添加vim功能
- jvm 总结
- 360旋转图片,常用于展示正在请求网络中
- (M)Dynamic Programming:392. Is Subsequence
- 利用dlib库(Python)实现实时(摄像头)人脸检测以及特征点标定(landmark))
- 链式前向星