面試題53 I 在排序陣列中查詢數字 I

2021-10-05 06:49:32 字數 1177 閱讀 9096

題目描述

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

示例 1:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: 2

示例 2:

輸入: nums = [5,7,7,8,8,10], target = 6

輸出: 0

限制:0 <= 陣列長度 <= 50000

解法一

因為引數是整形,可以用二分查詢k-0.5、k+0.5 兩數應該插入的位置,相減即次數。

解法二

二分查詢出任意target值,再左右遍歷。

int

search

(int

* nums,

int numssize,

int target)

}//陣列中不存在target

return0;

}

注意計數時的site值判斷,防止陣列越界。

注意陣列中不存在target時的返回。

解法三

二分查詢左右邊界,邊界差值為出現次數。

int

search

(int

* nums,

int numssize,

int target)

return cnt;*/

int i =0;

int j = numssize -1;

int left;

int right;

int m;

//二分查詢左邊界

while

(i <= j)

left = j;

i =0;

j = numssize -1;

//二分查詢右邊界

while

(i <= j)

right = i;

return right-left-1;

}

複雜度分析:

時間複雜度 o(log n): 二分法為對數級別複雜度。

空間複雜度 o(1)o(1) : 幾個變數使用常數大小的額外空間。

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列中出現的次數,例如,輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4.思路 既然輸入的陣列是排序的,那麼我們自然能想到用二分查詢演算法,如何高效的利用二分查詢,可以分別利用二分查詢找到第乙個k和最後乙個k。class solution return number ...

面試題53 在排序陣列中查詢數字

題目一 統計乙個數字在排序陣列 現的次數。解法一 利用c stl的二分查詢 class solution int getnumberofk vectordata,int k 解法二 看見有序,肯定就是二分查詢了,演算法比較簡單,不多說,值得一提的是,不要拘泥於遞迴,要會迴圈寫法。暴力匹配,時間複雜度...

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列 現的次數。考察點 二分查詢的應用 知識遷移能力。思路 可以直接想到時間複雜度為o n 的從前到後的遍歷方法。這裡採用二分查詢法,找到特定出現的k,如果中間的數字比k 大,那麼第一次出現的k 只能出現在前半段,如果中間的數字比k小,那麼第一次出現k的位置只能在後半段,如果相等的...