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

2021-10-06 23:47:00 字數 2333 閱讀 3185

0~n-1中缺失的數字

陣列中數值和下標相等的元素

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

例如輸入排序陣列[1,2,3,3,3,3,4,5]和數字 3 ,由於 3 在這個陣列**現了 4 次,因此輸出 4

整數二分一般寫二分的思考順序是這樣的:首先通過題目背景和check(mid)函式的邏輯,判斷答案落在左半區間還是右半區間。

左右半區間的劃分方式一共有兩種:

中點mid屬於左半區間,則左半區間是[l, mid],右半區間是[mid+1, r],更新方式是r = mid;或者l = mid + 1,此時用第乙個模板。

中點mid屬於右半區間,則左半區間是[l, mid-1],右半區間是[mid, r],更新方式是r = mid - 1;或者l = mid,此時用第二個模板。

利用二分查詢 找個第乙個出現最後乙個出現的索引,然後相減

mid屬於左半區,分界點在[mid+1,right]右半區

mid在右半區,答案在有半區[mid,right]

乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0到n-1之內。

在範圍0到n-1的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字

假設陣列中第乙個缺失的數是 x ,那麼陣列中的數如下圖所示

藍色部分都滿足nums[i]==i紅色部分不滿足nums[i]==i

當 if(

nums

[mid

]!=m

id)if(nums[mid] != mid)

if(num

s[mi

d]!=

mid)

, 答案 【下標 x 】在mid左邊,且mid 屬於左邊區間

注意——另外要注意特殊情況:當所有數都滿足nums[i] == i時,表示缺失的是 n。

if (nums[r] == r) r ++ ; // 考慮特殊情況

return r;}};

假設乙個單調遞增的陣列裡的每個元素都是整數並且是唯一的。

請程式設計實現乙個函式找出陣列中任意乙個數值等於其下標的元素。

例如,在陣列[-3, -1, 1, 3, 5]中,數字3和它的下標相等

n um

s[i]

−inums[i]-i

nums[i

]−i

還為遞增數列,利用二分法,尋找 0 元素

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