题目描述:
Given an array of integers, the majority number is the number that occurs more than half
of the size of the array. Find it.
Example
Given [1, 1, 1, 1, 2, 2, 2]
, return 1
Challenge
题目思路:
O(n) time and O(1) extra space
这题可以用greedy方法做,不过greedy的方法没什么可学习性。这里还是用了普通的方法,建一个map记录每个数出现的次数这么做。
Mycode(AC = 29ms):
class Solution {
public:
/**
* @param nums: A list of integers
* @return: The majority number
*/
int majorityNumber(vector<int> nums) {
// write your code here
if (nums.size() == 0) return 0;
// use map to record the number of times that
// nums[i] appears
map<int, int> helper;
for (int i = 0; i < nums.size(); i++) {
if (helper.find(nums[i]) != helper.end()) {
helper[nums[i]]++;
if (helper[nums[i]] > nums.size() / 2) {
return nums[i];
}
}
else {
helper[nums[i]] = 1;
}
}
for (auto it = helper.begin(); it != helper.end(); it++) {
if (it->second > nums.size() / 2) {
return it->first;
}
}
return 0;
}
};