做leetcode了解的,挺简单的算法,但是一下子也没有那么容易想到
题目指路:
元素构成:
- 一个目前可能的主要元素 candidate(初始为任意值)
- 该候选主要元素的出现次数count(初值为0)
遍历数组a,到a[i]时进行如下操作:
if (count==0) candidate=a[i];
if (a[i]==candidate) count+=1;
else count-=1;
遍历结束candidate的值可能为主要元素。
简单来说:遇到相同的数count+1,遇到不同的数count-1。
原理:主要元素的出现次数大于其他元素的出现次数总和
时间复杂度 O(n) 空间复杂度 O(1)