C 利用二分查詢尋找滿足條件的區間

2021-10-24 08:36:47 字數 1185 閱讀 2718

給定乙個按照公升序排列的整數陣列 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 在搜尋範圍內且...