您的位置:首页 > 其它

leetcode 34. Search for a Range

2016-06-15 10:49 316 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: