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

2021-09-19 07:51:42 字數 1418 閱讀 3552

統計乙個數字在排序陣列**現的次數。

正常的思路就是二分查詢了,我們用遞迴的方法實現了查詢k第一次出現的下標,用迴圈的方法實現了查詢k最後一次出現的下標。

除此之外,還有另一種奇妙的思路,因為data中都是整數,所以我們不用搜尋k的兩個位置,而是直接搜尋k-0.5和k+0.5這兩個數應該插入的位置,然後相減即可。

法一:

//普通迴圈查詢

public

class

solution

}return flag;

}public

static

void

main

(string[

] args)

; system.out.

println

(solution.

getnumberofk

(input,2)

);}}

//二分查詢

public

class

solution

return0;

}public

static

intgetfirst

(int

array,

int k,

int start,

int end)

if(start < array.length && array[start]

== k)

return start;

else

return-1

;}// 迴圈

public

static

intgetlast

(int

array,

int k,

int start,

int end)

if(end >=

0&& array[end]

== k)

return end;

else

return-1

;}public

static

void

main

(string[

] args)

; system.out.

println

(solution.

getnumberofk

(input,2)

);}}

法2:

public

class

solution

public

intbisearch

(int

array,

double k)

else

}return start;

}}

劍指Offer 53 在排序陣列中查詢數字

package 劍指offer public class 劍指53 在排序陣列中查詢數字 和數字3,由於3在陣列中出現4次,所以返回結果4 思路 因為陣列是有序的,所以採用二分法查詢,當找到乙個k時,因為可能前面或者後面都有k,如果從當前找的到位置往兩頭開始遍歷,那麼有可能整個陣列為一樣的數,所以時...

劍指Offer 53 在排序陣列中查詢數字

統計乙個數字在排序陣列 現的次數。例 輸入陣列和數字3。由於3在這個陣列 現了4次,輸出4。遍歷陣列統計。時間複雜度 o n 空間複雜度 o 1 遍歷統計沒有利用到這是個排序陣列的資訊。因為是排序陣列,所以需要統計的數字i個數等於i right i left 1。只要找到數字的邊界即可。同時可以利用...

劍指offer 53 在排序陣列中查詢數字

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。思路 看到 排列陣列 第一反應就得是二分查詢。但是一般的二分,如果在中點處剛好找到乙個數等於target,那接下來往哪邊走呢?沒辦法判...