问题:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的一半。
理解:遍历数组中的数找出出现次数最多的。
思路:设置一个计数器n,设置一个返回的值先等于数组的第一个数,遍历数组如果相同则n自加,若不同则n自减,当n减到0,返回值则等于当前的数。刚开始考虑了有两个出现一样多的情况,因为严格大于二分之一数组长度,所以没有等于情况。
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
// write your code here
int n = 1;
int temp = nums[0];
for(int i = 1 ;i < nums.size();i++){
if(temp == nums[i])
n++;
if(temp != nums[i])
n--;
if(n==0){
temp = nums[i];
n = 1;
}
}
return temp;
}
};