統計乙個數字在排序陣列中出現的次數。如和3,輸出4。
看見有序,肯定就是二分查詢了,演算法比較簡單,不多說,值得一提的是,不要拘泥於遞迴,要會迴圈寫法。
public
class
solution37
int firstk =
getfirstk
(array, k,
0, length -1)
;int lastk =
getlastk
(array, k,
0, length -1)
;if(firstk !=-1
&& lastk !=-1
)return0;
}//遞迴寫法
private
intgetfirstk
(int
array,
int k,
int start,
int end)
int mid =
(start + end)
>>1;
if(array[mid]
> k)
else
if(array[mid]
< k)
else
if(mid -
1>=
0&& array[mid -1]
== k)
else
}//迴圈寫法
private
intgetlastk
(int
array,
int k,
int start,
int end)
else
if(array[mid]
< k)
else
if(mid +
1< length && array[mid +1]
== k)
else
mid =
(start + end)
>>1;
}return-1
;}public
static
void
main
(string[
] args),3
));}
}
《劍指offer》 數字在排序陣列中出現的次數
由排序陣列可以想到使用二分查詢法先查找到乙個待查的數字,然後再確定該數字第一次出現的位置和最後一次出現的位置,相減即可得到該數字在排序陣列中出現的次數。該方法的時間複雜度為o logn k第一次出現的下標 int getfirstk vector data,int lo,int hi,int k e...
劍指offer 數字在排序陣列中出現的次數
統計乙個數字在排序陣列中出現的次數。解法與思路 陣列時排序好的陣列,要找乙個數字在排序陣列中出現的次數。首先我們想知道這個數字是否在陣列出現了,這樣很自然我們就會想到在乙個排序的陣列中找乙個數字,那麼應該採用二分查詢,時間複雜度為o logn 如果這個數字在陣列中,返回這個數字對應的數字下標。從這個...
劍指offer 數字在排序陣列中出現的次數
題目 劍指offer 數字在排序陣列中出現的次數 樸素的思路不說了,掃一遍就行了。class solution return cnt 參考了這篇鏈結 劍指offer面試題 32.數字在排序陣列中出現的次數 的確是學到了更好的思路,主要也是自己對於排序陣列還是不夠敏感。對於陣列類題目,其實常見的處理思...