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

2021-07-10 13:15:52 字數 774 閱讀 5358

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

解法與思路:

陣列時排序好的陣列,要找乙個數字在排序陣列中出現的次數。首先我們想知道這個數字是否在陣列出現了,這樣很自然我們就會想到在乙個排序的陣列中找乙個數字,那麼應該採用二分查詢,時間複雜度為o(logn)。如果這個數字在陣列中,返回這個數字對應的數字下標。從這個下標開始向陣列的兩端遍歷陣列元素,並比較陣列元素是否和要尋找的關鍵字相等。

int getnumberofk(vectordata ,int k)

//折半查詢

int length = data.size();

int pos = findposition(data, 0, length - 1, k);

if (pos == -1)

int times = 1;

for (int i = pos - 1; i >= 0; i--) }

for (int i = pos + 1; i < length; i++) }

return times; }

//findposition函式用來尋找關鍵字k在排序陣列中出現的位置

//採用二分查詢

int findposition(vector&data, int begin, int end, int k)

int mid = (begin + end) / 2;

if (data[mid] == k)

if (data[mid] < k)

if (data[mid] > k)

return -1; }

劍指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,那接下來往哪邊走呢?沒辦法判...