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;
}
}
}
}
};
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;
}
}
}
}
};
相关文章推荐
- [leetcode]Majority Element II
- LeetCode Majority Element JAVA
- leetcode解题报告(21):Majority Element
- [Leetcode,python] Majority Element 众数
- LeetCode--Majority Element
- Leetcode#169 Majority Element
- 【LeetCode】007 Majority Element 少数服从多数
- LeetCode-169-Majority Element-E
- leetcode- Majority Element
- LeetCode:169. Majority Element
- leetcode Majority Element
- LeetCode|Majority Element *
- [leetcode 229]Majority Element II
- 【LeetCode】169. Majority Element(Easy)解题报告
- [LeetCode] Majority Element II
- [LeetCode]Majority Element
- leetcode 153: Majority Element
- LeetCode 4 :Majority Element
- [LeetCode] Majority Element solution
- LeetCode Majority Element