数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-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) 内完成吗?
1.设置计数器cnt为0 初始元素major为数组第一个元素
2.遍历数组 当cnt为0时候 将当前推选元素赋值给major 并且+1 如果不为0 判断当前元素是否等于major如果等于cnt+1 否则-1
3.遍历完成之后 最多元素对应的计数器>0 遍历数组算出数组中等于major的元素个数
4.个数跟数组的长度一半作比较
public class Solution {
public int MajorityElement(int[] nums) {
int major=0;
int cnt=0;
int total=0;
for(int i=0;i<nums.Length;i++)
{
if(cnt==0)
{
major = nums[i];
cnt++;
}
else
{
if(major==nums[i])
{
cnt++;
}
else
{
cnt--;
}
}
}
if(cnt>0)
{
for(int i=0;i<nums.Length;i++)
{
if(nums[i]==major)
{
total++;
}
}
if(total>nums.Length/2)
{
return major;
}
else
{
return -1;
}
}
return -1;
}
}