import java.util.Stack;
//Given a sorted array of integers, 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].
//For example,
//Given [5, 7, 7, 8, 8, 10] and target value 8,
//return [3, 4].
public class Solution {
public static void main(String[] args) {
int[] input = {0,0,0};
int target = 2;
int[] result = searchRange(input,target);
System.out.println(result[0]+" "+result[1]);
}
public static int[] searchRange(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int[] result = {-1,-1};
while(left<right){ //变形的二分查找
int mid = (left+right)/2;
if(nums[mid]<target){ //提升l的值
left = mid+1;
}else if(nums[mid]>=target){ //若相等则将r值等于m
right = mid;
}
}
if(nums[left] == target){ //若nums[l]=target,则匹配,l必为第一次出现的target脚标
result[0] = left;
}
right = nums.length-1; //left已经确定,只需重新定义right即可
while(left<right){
int mid = (left+right)/2+1;
if(nums[mid]>target){
right = mid-1;
}else if(nums[mid]<=target){
left = mid;
}
}
if(nums[right] == target){
result[1] = right;
}
return result;
}
}
leetcode 34. Search for a Range
最新推荐文章于 2024-09-21 10:38:43 发布