算法博客2 - 找出数组中元素数目超过一半的元素
题目描述:
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.
解题思路:
- 使用两层for循环遍历数组,用set容器排除已经出现过的元素,当重复元素很多时,可以起到很好的效果:
class Solution {
public:
int majorityElement(vector<int> & nums) {
int n = nums.size();
set<int> temp;
for (int i = 0; i < n; ++i) {
if (temp.find(nums[i]) == temp.end()) {
temp.insert(nums[i]);
int count = 1;
for (int j = i + 1; j < n; ++j) {
if (nums[j] == nums[i])
count++;
}
if (count > n / 2) {
return nums[i];
}
}
}
return 0;
}
};
- 使用一层for循环,引入两个变量,majorNumber记录当前认为的最多元素,j作为计数器,遵循如下规则。遍历数组是,若遇到等于majorNumber相等的元素,j自增,若不等,j自减,若j小于0,则重置j为1,majorNumber则记为未遍历的数组的第一位:
class Solution {
public:
int majorityElement(vector<int> & nums) {
int majorNumber = nums[0];
int j = 1;
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] == majorNumber)
j++;
else
j--;
if (j == -1) {
majorNumber = nums[i];
j = 1;
}
}
return majorNumber;
}
};