题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组中长度的一半,因此输出为2.
解法一:根据数组特点找出的O(n)的算法
数组中有一个数字出现的次数超过数组长度的一半,也就是说他出现的次数比其他所有出现的次数还要多,因此我们可以考虑在便利数组的时候保存两个值:一个是数组中的一个数字,一个是次数,当我们便利到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1.如果下一个数字和我们之前保存的数字不同,则次数件一。如果次数为0我们保存下一个数字,并把次数设为1.由于我们要找的数字肯定比其他数字的次数的和还要多,那么要找的数字肯定是最后一次把次数设为一时对应的数字。