目录
题目https://leetcode.cn/problems/majority-element/comments/
一.错误思路分析
第一次做这个题的反应就是设置一个数组来计数,如果计数大于n/2就找到了。
leetcode的两个案例能通过,但是当元素里有负数的时候,数组会访问越界
所以这个方法行不通。
二.正确思路
从第一个数开始count=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个 。
int majorityElement(int* nums, int numsSize)
{
int count=1;
int key=nums[0];
int i=0;
for(i=1;i<numsSize;i++)
{
if(key==nums[i])
count++;
else
{
count--;
if(count==0)
key=nums[i+1];
}
}
return key;
}
这样就不会存在越界,而且这个方法的效率更高,也节省了许多空间 。