面試 劍指offer 陣列中出現次數超過一半的數字

2021-08-13 14:20:19 字數 991 閱讀 6818

陣列中有乙個數字出現的次數超過陣列長度的一般,請找出這個數字。

思想:先在陣列中隨機選擇乙個數字,然後調整陣列中數字的順序,使得比選中的數字小的數字都排在它的左邊,比選中的數字大的數字都排在它的右邊。如果這個選中的數字的下標剛好是n/2,那麼這個數字就是陣列的中位數。如果它的下標大於n/2,那麼中位數應該位於它的左邊,我們可以接著在它的左邊部分的陣列中查詢。如果它的下標小於n/2,那麼中位數應該位於他的右邊,我們可以接著在它的右邊部分的陣列中查詢。這是乙個典型的遞迴問題。

#include using namespace std;

int partition(int *a,int low,int high)

a[low]=a[high];

while (lowint *array,int number,int

len)

}if (time*2>len)

else

return false;

}void morethanhalfarray(int *array,int

len)

else

}int result=array[middle];

if (confirmnum(array,result,len))

void morethanhalf(int *array,int

len)

else

if(array[i] == result)

else

time--;

}if(confirmnum(array,result,len))

int main()

; morethanhalfarray(array,9);

morethanhalf(array,9);

return 0;

}

由於等於二分之一肯定大於三分之一,估可以將此題轉化為陣列中有乙個數字出現的次數超過了陣列長度的三分之一,找出這個數字。

劍指offer 陣列在排序陣列中出現的次數

記錄次數,直接用data.count k 也通過了。或者常規演算法,出現有序用二分查詢。class solution def getnumberofk self,data,k write code here if len data 0 return 0 count 0 low 0 high len ...

劍指offer第39 陣列中出現次數超過一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。coding utf 8 classsolution defmorethanhalfnum solution self numb...

劍指Offer 028陣列中出現次數超過一半的陣列

028陣列 現次數超過一半的陣列 題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0 方法 map統計法 思路 遍歷陣列,用map來記錄每個數出現的次數,最後再遍歷map查詢是...