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 1Challenge
O(n) time and O(1) extra space
记录一个candidate和其出现的次数count,遍历每个数,如果count==0,则把candidate置为遍历到的数,否则看遍历到的数和candidate是否相等,如果相等,则count++,否则count–(抵消),遍历结束后,candidate就是主元素。
这个方法在assume存在majority number的时候是成立的,如果没有这个前提,则要再loop一次找到这个数出现的次数是否确实大于一半
class Solution {
public:
/**
* @param nums: A list of integers
* @return: The majority number
*/
int majorityNumber(vector<int> nums) {
// write your code here
int len=nums.size();
if(len==1){
return nums[0];
}
int cnt=1;
int index_res=0;
for(int i=1;i<nums.size();i++){
if(nums[i]==nums[index_res]){
cnt++;
}else{
cnt--;
}
if(cnt==0){
cnt=1;
index_res=i;
}
}
return nums[index_res];
}
};