题目
如果数组中多一半的数都是同一个,则称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例 1:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:
输入:[3,2]
输出:-1
示例 3:
输入:[2,2,1,1,1,2,2]
输出:2
解题思路
遍历整个数组,并用一个计数器计数,第一个数记为c,如果后一个数等于当前数,count加1,如果不相等,再判断count的值,如果大于0,count减1,否则c重新赋值,count置为0;
最后再统计c的个数,如果大于数组个数的一半,返回c,否则返回-1。
代码
class Solution {
public int majorityElement(int[] nums) {
int count = 0;
int i = 1,c = nums[0];
while(i<nums.length){
if(nums[i] == c){
count++;
}else if(count > 0){
count--;
}else{
c = nums[i];
count = 0;
}
i++;
}
for(int num : nums){
if(num == c){
count++;
}
}
return count>nums.length/2?c:-1;
}
}
复杂度分析
- 时间复杂度为 O ( N ) O(N) O(N)
- 空间复杂度为 O ( 1 ) O(1) O(1)