題:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。
思路:首先看到這個題目,數組中一個數字出現的次數超過數組長度的一半,也就意味着這個數字出現的次數比數組中其它數字出現次數的總和還多。我們在遍歷的數組的時候可以用兩個值來記錄,一個是數組出現的次數count,一個用來保存它的結果result,我們把數組的第一個數arr[0]作爲結果保存跟下一個數字比較,count記爲1,如果下一個數字跟之前保存的數字相同count+1,如果跟之前保存的數字不同,則count-1。如果次數爲0,我們需要保存它的下一個數字,並且將次數設爲1。因爲要找的數字出現的次數超過數組長度長度的一半,所以最後一次設爲1的數字就是我們要找的數字。
代碼:
#include <iostream> using namespace std; int Serach(int arr[],int len) { int count=1; int result=arr[0]; for(int i=1;i<len;i++) { if(count==0) { result=arr[i]; count=1; } else if(result == arr[i]) count++; else count--; } return result; } int main() { int arr[]={1,2,3,2,2,2,5,4,2}; int sz=sizeof(arr)/sizeof(arr[0]); int ret=Serach(arr,sz); cout<<ret<<endl; return 0; }