您的位置:首页 > 其它

LeetCode之Majority Element

2017-03-06 14:59 127 查看
这道题要求我们从一个长度为n的整数数组中找出出现次数超过⌊ n/2 ⌋的元素,我们将其称为最多数。这里,我采用分治算法的思路。将一个数组从中间分为两半,分为两个数组,那么原数组的最多数至少是两个子数组中的一个数组的最多数。根据这个思想,本题的解题思路是将数组从中间分为两半,对左右两个子数组分别递归调用majorityElement函数,然后比较左右两个数组的最多数,在原数组中出现次数多的就是原数组的最多数(如果两个不同最多数出现次数相同,则原数组没有最多数);当数组长度为1时,最多数就返回数组中的那个数。最后,就可以返回输入数组的最多数。

class Solution {
public:
int majorityElement(vector<int>& nums) {
if (nums.size() == 1) {
return nums[0];
} else {
vector<int> left(nums.size() / 2);
vector<int> right(nums.size() - nums.size() / 2);
int i;

for (i = 0; i < nums.size() / 2; ++i) {
left[i] = nums[i];
}
for (int j = 0; j < nums.size() - nums.size() / 2; ++j, ++i) {
right[j] = nums[i];
}

int a = majorityElement(left);
int b = majorityElement(right);

if (a == b) {
return a;
} else {
int ca = 0;
int cb = 0;

for (int i = 0; i < nums.size(); ++i) {
if (nums[i] == a) {
ca++;
} else {
if (nums[i] == b) {
cb++;
}
}
}

if (ca == cb) {
return a;
} else {
return ca > cb ? a : b;
}
}
}
}
};

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: