一:解题思路
Time:O(log(n)),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { private: int binarySearchLastOne(vector<int>& nums, int target) { int low = 0, high = nums.size() - 1; while (low <= high) { int mid = low + (high-low) / 2; if (nums[mid] > target) high = mid - 1; else low = mid + 1; } return high; } public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ret = {-1,-1}; if (nums.size() == 0) return ret; int end = binarySearchLastOne(nums,target); int start = binarySearchLastOne(nums,target-1)+1; if (start >= 0 && start <= end && end < nums.size()) ret = {start,end}; return ret; } };
Java:
class Solution { private int binarySearchLastOne(int[] nums,int target) { int low=0; int high=nums.length-1; while(low<=high) { int mid=low+(high-low)/2; if(nums[mid]>target) high=mid-1; else low=mid+1; } return high; } public int[] searchRange(int[] nums, int target) { if(nums==null || nums.length==0) return new int[]{-1,-1}; int end=binarySearchLastOne(nums,target); int start=binarySearchLastOne(nums,target-1)+1; if(start>=0 && start<=end && end<nums.length) return new int[]{start,end}; return new int[]{-1,-1}; } }