給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。
你的演算法時間複雜度必須是 o(log n) 級別。
如果陣列中不存在目標值,返回 [-1, -1]。
示例 1:
輸入: nums = [5,7,7,8,8,10], target = 8
輸出: [3,4]
示例 2:
輸入: nums = [5,7,7,8,8,10], target = 6
輸出: [-1,-1]
二分查詢的基礎知識了解,:二分查詢的基礎知識
在二分查詢的基礎上,修改為尋找目標數的邊界下標,分別尋找左區間下標和右區間下標,在尋找為左下標的同時,當該下標的左邊乙個的數小於該數時或者已為下標為0的數,則返回該下標,右下標同理。
過程展示如下:
實現**如下:
class
solution
private
:int
left_bound
(std::vector<
int>
& nums,
int target)
end = mid -1;
}else
if(target < nums[mid]
)else
if(target > nums[mid])}
return-1
;}intright_bound
(std::vector<
int>
& nums,
int target)
begin = mid +1;
}else
if(target < nums[mid]
)else
if(target > nums[mid])}
return-1
;}};
二分查詢,尋找左側邊界,尋找右側邊界
這個場景是最簡單的,肯能也是大家最熟悉的,即搜尋乙個數,如果存在,返回其索引,否則返回 1 int binarysearch int nums,int target else if nums mid target else if nums mid target return 1 尋找左邊界二分查詢 ...
二分查詢 尋找兩個有序陣列的中位數
力扣 尋找兩個有序陣列的中位數,下面看一下題目 題目敘述 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums...
簡單的二分查詢條件
大家都知道二分查詢的原理,將搜尋的區域分兩半,當然只對已經排序了的起作用,這裡說的是迭代的方式1.end mid 1 start mid 1 在這種情況下,start 和 end 之間始終是所搜範圍,則搜尋空間範圍是 start,end 這兩句的意思就已經指出 start 和 end 在搜尋範圍內且...