题目链接
解题思路: 这道题的意思是找到数组里面一个数的起始位置和末尾位置,比如: [1,5,5,7,7,8] 8的起始末尾位置为[5,5] 如果没有这个目标数,就返回[-1,-1]
还是折半查找做,先看能不能找到这个数,能找到就设置两个指针start,end从这个数开始分别向两边外拓;如果过没有找到返回[-1,-1]
提交代码:
class Solution {
public int[] searchRange(int[] nums
, int target
) {
int pos
[]= {-1,-1};
if(nums
==null
||nums
.length
==0) return pos
;
int mid
,left
=0,right
=nums
.length
-1;
int start
,end
;
while(left
<=right
) {
mid
=(left
+right
)/2;
if(nums
[mid
]<target
) left
=mid
+1;
else if(nums
[mid
]>target
) right
=mid
-1;
else {
start
=mid
;end
=mid
;
while(start
>=0&&nums
[start
]==target
)
start
--;
while(end
<nums
.length
&&nums
[end
]==target
)
end
++;
pos
[0]=start
+1;pos
[1]=end
-1;
return pos
;
}
}
return pos
;
}
}
运行结果: