找出数组中出现出现一半以上次数的数(一)
老师留了这道微软面试题 并给出了解题思路
j用于临时存储数组中的数据,count用于存储某个数出现的次数。
开始时k存储数组中的第一个数,count为0,如果数组出现的数于j相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给j
因为指定的数出现的次数大于数组长度的一半,所有count++与count--相抵消之后,最后count的值是大于等于1的,j中存的那个数就是出现最多的那个数。
#include <iostream> using namespace std; int search(int A[], int size) { if (NULL == A || size<= 0) { return-1; } int count = 0; int j; for (int i = 0; i<size; i++) { if (count == 0) { j= A[i]; count = 1; } else { if (A[i] == j) count++; else count--; } } return j; } int main() { int A[6] = { 1,2,2,5,5,5 }; cout << search(A,6)<<" "; return 0; }