統計乙個數字在排序陣列中出現的次數。
陣列是排序的,所以重複出現的數字是相鄰排列的。
用二分查詢演算法,找到第一次出現的位置,和 最後一次出現的位置。
判斷第一次出現的位置條件為:當前數字的前乙個是否與之相等,若是則繼續查詢,否則該位置就是第一次出現的位置。
判斷最後一次出現的位置條件為:當前數字的後乙個是否與之相等,若是則繼續查詢,否則該位置就是最後一次出現的位置。
出現的次數= 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是第乙個不...