) @ ]3 h' I& S" `$ T( {2 u# M0 <= nums.length <= 10(5) 0 ?2 W! U9 f* p4 ^-10(9) <= nums[i] <= 10(9) % N% U( L6 {# bnums 是一个非递减数组 * w3 b% U7 o9 m9 ]7 ~+ v-10(9) <= target <= 10(9) ! e3 ^+ C+ j" L8 w2 A思路( {: j$ K- m9 u3 h5 `' |6 l; _% s {
关键步骤,与二分查找不同 / H. s: V7 W4 A) |* a: ~if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1); ' h$ i! X( j- S: C$ c$ e9 utarget==nums[mid]时,不结束循环,继续进入6 k8 a# ^+ A/ N
两个if可以同时进入,寻找界限# c$ Y: j0 m! u) |4 v5 f& P5 r5 ?
设置限制,防止mid-1,mid+1越界 @# r2 V, h `4 Y$ L3 s代码6 [ i7 w7 X$ }! M' Q* q9 h
class Solution {' s8 }3 O( [( ], i
public: 1 `1 q) a* m1 N$ ?2 b int left=-1,right=-1; . k! u; a; J$ {! ~ T/ U vector<int> searchRange(vector<int>& nums, int target) { 0 Y; |) ^& V% s8 C9 y- z: R ^3 m if(nums.size()==0) return vector<int>{-1,-1};, ?* D$ Y/ b# Z: g, Z8 v% Z+ V" F
binary_search(nums,target,0,nums.size());3 d2 I$ I& b0 w0 S, v, f
return vector<int>{left,right};' L! S3 j7 c- M6 q
}: i5 h: t- Q* J. ^& ?
void binary_search(vector<int>& nums,int target,int l ,int r){ F) \, u7 {3 v" g1 @3 I \ int mid=(r-l)/2+l; 9 o( R$ {& h% j) l n6 ~% ^5 s- n //printf("%d-%d\n",l,r); " q2 p' H6 O9 o/ n if(target==nums[mid]){8 E b8 W2 L+ N7 ?; e1 T; u" ~. d) O
if(left>mid||left<0) left=mid; + }9 ~6 H3 X G& A# p if(right<mid||right<0) right=mid;% c+ v2 o* k: W8 A9 E. K
}3 F9 M" d ?2 ^4 p& W+ q' ^
if(l>=r) return;: V% I! F! O% r( L' P
if(target<=nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);; n+ U& p- C, y: |
if(target>=nums[mid]&&mid+1<nums.size()) binary_search(nums,target,mid+1,r);9 b. R6 ~4 D. T4 ?- O; B
} , r) G* N. ^4 z7 Y};: \: [1 E: P, S7 q& \4 |! r
; g ]/ v; I. M————————————————. Q/ z! c. X9 i5 ?
版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, A }$ n- ~0 q8 e d& J/ S
原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832 p6 Q8 F+ I, b
9 K' r- x( Q) J) L' o, U2 T: {6 c ( N* _, d- p( D& @