劍指offer 37 數字在排序陣列中出現的次數

2021-09-03 01:20:08 字數 1137 閱讀 9436

統計乙個數字在排序陣列中出現的次數。如和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.數字在排序陣列中出現的次數 的確是學到了更好的思路,主要也是自己對於排序陣列還是不夠敏感。對於陣列類題目,其實常見的處理思...