代码:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> out(2, -1);
if(nums.empty() || nums[0] > target || nums.back() < target) return out;
int l = 0, r = nums.size();
// find the starting position
while(l <= r) {
int mid = (l + r)/2;
if(nums[mid] == target && (mid == 0 || nums[mid-1] < target)) {
out[0] = mid; break;
}
else if(nums[mid] >= target) r = mid - 1;
else if(nums[mid] < target) l = mid + 1;
}
// find the ending position
l = 0, r = nums.size();
while (l <= r){
int mid = (l + r)/2;
if(nums[mid] == target && (mid == nums.size()-1 || nums[mid+1] > target)){
out[1] = mid; break;
}
else if(nums[mid] <= target) l = mid + 1;
else if(nums[mid] > target) r = mid - 1;
}
return out;
}
};
注:小数求绝对值可以用fabs()
class Solution {
public:
int mySqrt(int x) {
if(x < 2) return x;
int output = 0;
double l = 0, r = x;
while(l < r){
double mid = (l+r)/2;
if(fabs(x - mid*mid) < 0.01){
output = int(mid);
break;
}
else if(mid*mid > x) r = mid;
else if(mid*mid < x) l = mid;
}
return output;
}
};