题目:数组中出现次数超过一半的数字
idea:
solution1:如果是排序好的数组,则位于数组正中间位置的数字即为要寻找的数字。因此先对数组进行排序,再取出中间位置的数字。该解法需要对数组排序,时间复杂度略高
solution2:利用快排的想法,找到下标是数组中间位置的数字即为输出的数字,并不需要该数据前部分和后半部分的数字按顺序排列。
solution3:利用数组的特性,如果将数组中两两不相等的数字配对,则剩余未被配对的数据即为要输出的数字。其中,配对成功的数字对中不包含需要找出的数字也没关系,对算法的结果不造成影响。
针对解法3,遍历数组,每次删除数组中不相等的两个数字,最后剩余的数即为要找的数。
int find_the_element(int a[])
{
int element; //表示未被匹配的数字
int times=0; //表示element未被匹配的个数
for(int i=0;i<n;i++)
{
if(times==0)
{element=a[i];
times++;}
else
if(element==a[i])
times++;
else
times--;
}
return element;
}