如果数组中多一半的数都是同一个,则称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-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
说明: 你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var len = nums.length;
var count = 0,
num,
flag = -1,
midLen = Math.floor(len/2) + 1;
for(var i = 0; i < len; i++){
if(count == 0){
num = nums[i];
}
if(num == nums[i]){
count ++;
}else{
count --;
}
}
if(count > 0){
var countLen = 0;
for(var j = 0; j < len; j++){
if(nums[j] == num){
countLen++;
}
if(countLen == midLen){
flag = num;
break;
}
}
}
return flag;
};