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

2021-10-10 04:56:09 字數 1366 閱讀 7504

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

示例 1:

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

輸出: 2

示例 2:

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

輸出: 0

最簡單的遍歷方法:

class

solution

return count;

}else

if(nums[i]

>target)

return0;

}return0;

}}

二分查詢的方法:

我們可以把binarysearch方法理解成:尋找在nums陣列中第乙個大於等於target的元素。

這是因為這個陣列一直是向左搜尋的,即使遍歷到的位置的元素與target相等也會繼續向左搜尋。

class

solution

//二分查詢

public

intbinarysearch

(int

nums,

int target)

return low;

}}

當然,也可以寫成下面的形式:

此時的binarysearch方法可以理解成:尋找在nums陣列中最後乙個小於等於target的元素。

這是因為此時的陣列一直向右搜尋,即相等時向右搜尋。

class

solution

//二分查詢

public

intbinarysearch

(int

nums,

int target)

return low;

}}

乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。

示例 1:

輸入: [0,1,3]

輸出: 2

示例 2:

輸入: [0,1,2,3,4,5,6,7,9]

輸出: 8

和上面的思路類似,只是把判斷target和mid的大小,改為判斷下標為mid的數字是不是mid

class

solution

return low;

}}

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