題目:
統計一個數字在排序數組中出現的次數。
解法:
1、先求該數字出現的最左邊位置。
2、再求該數字出現的最右邊位置。
3、若該數字未出現,則會出現left在right右邊。且相鄰的情況。
最後結果仍然爲right-left+1 =0
代碼:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()==0||data.empty() ) //邊界異常判斷
return 0;
int n = data.size();
int left =0;
int right = n-1;
while(left<=right) //兩個while只有一處不一樣,
{ // 求left位置
int mid = (right+left)>>1;
if(data[mid]<k)
left = mid+1;
else if(data[mid]>k)
right = mid-1;
else if(data[mid]==k) 中間值等於目標值K,那麼出現k值的最左邊位置一定位於left,mid-1之間。
right =mid-1;
}
int a= left;
left =0;
right = n-1;
while(left<=right) //求right位置。
{
int mid = (right+left)>>1;
if(data[mid]<k)
left = mid+1;
else if(data[mid]>k)
right = mid-1;
else if(data[mid]==k) //中間值等於目標k,那麼出現K的最右位置一定在mid+1,right之間。
left =mid+1;
}
return right-a+1;
}