您的位置:首页 > 其它

[leedcode 34] Search for a Range

2015-07-09 18:09 323 查看
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 int[] searchRange(int[] nums, int target) {
//本题是在已排序的数组中进行查找,因此应用二分查找的思想
//牢记二分查找的参数以及函数!
//当找到target数时,进行顺序查找,设置两个指针,一个是left,代表最侧不为target的下标。另一个是right,代表最右侧不为target的下标
//注意int 数组的初始化!int a[]={-1,-1};
int[] result={-1,-1};
if(nums.length<1) return result;
int res=find(nums,target,0,nums.length-1);
if(res==-1){
return result;

}
int left=res-1;
int right=res+1;
while(left>=0&&nums[left]==target){
left--;
}
while(right<nums.length&&nums[right]==target){
right++;
}
int rel[]={left+1,right-1};
return rel;
}
public int find(int[] nums,int target,int start,int end){
if(start>end) return -1;
int mid=(start+end)/2;
if(nums[mid]==target){
return mid;
}
if(target>nums[mid]){
return find(nums,target,mid+1,end);
}else{
return find(nums,target,start,mid-1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: