面試題38 數字在排序陣列中出現的次數

2021-07-04 07:10:35 字數 725 閱讀 1226

統計乙個數字在排序陣列中出現的次數。

陣列是排序的,所以重複出現的數字是相鄰排列的。

用二分查詢演算法,找到第一次出現的位置,和 最後一次出現的位置。

判斷第一次出現的位置條件為:當前數字的前乙個是否與之相等,若是則繼續查詢,否則該位置就是第一次出現的位置。

判斷最後一次出現的位置條件為:當前數字的後乙個是否與之相等,若是則繼續查詢,否則該位置就是最後一次出現的位置。

出現的次數= last - first +1

時間複雜度:o(logn)

class solution 

int getfirstk(vectordata, int k, int start, int end)

else if(middata > k)

end = midindex-1;

else

start = midindex+1;

return getfirstk(data,k,start,end);

}int getlastk(vectordata, int k, int start, int end)

else if(middata > k)

end = midindex-1;

else

start = midindex+1;

return getlastk(data,k,start,end);

}};

面試題38 數字在排序陣列中出現的次數

問題說明 1.給定排序的陣列,例如從小到大已經排序。2.給定某個查詢關鍵字,求出該關鍵字出現的次數。3.完全遍歷一遍,時間複雜度為o n 並未充分利用排序的資訊。4.需要借鑑二分查詢的思想改進,演算法的時間複雜度為o logn package com.zhang.csdn author pizi d...

面試題38 數字在排序陣列中出現的次數

1.統計乙個數字在乙個排序陣列中出現的次數,例如陣列,找出3出現的次數4.分析 最直觀的方法就是從頭到尾的掃瞄一遍陣列,逐個進行比對,統計出現的次數。這樣的時間複雜度是o n 但是考慮到是已經排序的陣列,如果乙個數字在陣列中出現的話,找乙個數字有很多種方法,例如二分查詢的方法,可以在o lgn 的時...

面試題 數字在排序陣列中出現的次數

本體的思路 二分查詢 因為陣列有序 查詢數字 在陣列 中出現的次數 特殊 陣列為空 數字不出現在陣列中 數字出現在頭 尾 數字剛好為中間值 數字不為中間值 先對 返回 再判斷對 如果是首,則令last first,迴圈判斷list last 是否依舊等於a,相等則計數加 不等時,若last是第乙個不...