给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值 target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
你必须设计并实现时间复杂度为 O(log n)
的算法解决此问题。
class Solution {
public int mySqrt(int x) {
int index=-1,i=0,j=x;//index设为-1是因为1或者0都有可能是最终结果
while(i<=j){//这样才能包含全部情况
int middle=(i+j)>>>1;//防止溢出
if((long)middle*middle<=x){
i=middle+1;//就是相当于找到了一个值和目标比较近,但是把左边界右移,看看有没有离它更近的了
index=middle;
}else{
j=middle-1;//和左边同理
}
}
return index;
}
}
遗留问题:为什么if那里的数据类型要强转一下,转成long呢?