描述
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
You may assume that the array is non-empty and the majority number always exist in the array.
您在真实的面试中是否遇到过这个题?
是
样例
给出数组[1,1,1,1,2,2,2],返回 1
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
与最大子数组类似,可以申请一个map容器来处理这个问题:
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;
if(nums.size()==1) return nums[0];
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;
}
}
}
};