有多种方法,第一个想到的是用map,自增,当value值超过n/2时,就结束;
第二种方法是投票法,
代码如下
int majorityElement(vector<int> &num) {
int vote = num[0];
int count = 1;
int size = num.size();
//vote from the second number
for( int i = 1; i < size; i++ )
{
if( count == 0 ) { vote = num[i]; count++; }
else if( vote == num[i] ) count++;
else count--;
}
return vote;
}
每当当前值与前一个的值不同时,count自减,直到count为0,则重新开始投票,若数组中存在大多数的数,则最后一定能通过投票法把它投出来。
这篇博客主要是记载投票法,一个新的思路,处理多数问题时,可以利用本身的性质,进行抽象,有点像现实生活的单挑,也像不停的拼“刺刀”,能站在最后的一定是“体量”最大的那个。也像是生活中很多股份制,一旦有一个人有了超过50%的股份。。。