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

2021-06-27 07:57:49 字數 985 閱讀 3665

題目:統計乙個數字在排序陣列中出現的次數,例如輸入排序陣列和數字3,由於3在陣列中出現了4次,所以輸出4

思路:假設k為陣列中要統計的數字,我們可以可以確定第乙個k在陣列中出現的位置和最後乙個k在陣列中出現的位置,那麼如何確定第乙個k在陣列中出現的位置呢?

我們可以先使用二分查詢的方法在陣列中找到乙個k,二分查詢演算法總是拿陣列中間的數字和k做比較,如果中間數字比k大,則k只可能出現在陣列的前半部分,如果中間數字比k小

k只能全部出現在陣列的後半部分,如果中間數字和k相等,我們先判斷這個數字是不是第乙個k,如果位於中間數字前面的數字不是k那麼中間的數字k就是第乙個k,如果中間數字的前面一數字也是k,那麼第乙個k肯定出現的陣列的前半部分,我們只需在陣列的前半部分查詢第乙個k即可。查詢最後乙個k的思路和查詢第乙個k的思路相似。

#include

using namespace std;

//找到第乙個k的位置

int getfirstk(int *data,int length,int k,int start,int end)

else

}else if(middledata > k)

else

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

}//找到最後乙個k的位置

int getlastk(int *data,int length,int k,int start,int end)

else

}else if(middledata < k)

else

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

}int getnumberofk(int *data,int length,int k)

return num;

}int main()

;int k = 3;

int ans = getnumberofk(data,8,k);

cout<

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

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

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

思路 利用二分查詢分別求出該數字在陣列中第一次和最後一次出現的位置下標 include stdafx.h include include using namespace std 找到陣列中第一次出現key的元素的下標 int binarysearchfirstkey int narr,int nle...

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

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