Description
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm’s runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
Examples
Example 1:
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
解题思路
承接 33 题的思路
先按照33题找到任意 target 存在的位置,然后左右找到 start 和 end
class Solution {
static public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
while(low <= high){
int mid = (low + high) / 2;
int m = nums[mid];
if(target == m)
return mid;
int l = nums[low];
int h = nums[high];
if(l <= m){
if(l <= target && target <= m)
high = mid - 1;
else
low = mid + 1;
}
else{
if(m <= target && target <= h)
low = mid + 1;
else
high = mid - 1;
}
if(low > high)
return -1;
}
return -1;
}
public int[] searchRange(int[] nums, int target) {
int from = search(nums, target);
int[] answer = {-1, -1};
int start = from;
int end = from;
if(from == -1)
return answer;
else{
while(start > 0 && nums[start] == nums[start - 1])
start--;
while(end < nums.length - 1 && nums[end] == nums[end + 1])
end ++;
}
answer[0] = start;
answer[1] = end;
return answer;
}
}
其他
看了solution,觉得和自己的方法大同小异,就没有再写一份啦~