您的位置:首页 > 其它

LeetCode 34 Search for a Range

2016-06-08 00:00 441 查看
Search for a Range

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]
.
解题思路:有了上一题的启发,这一题的解决办法是利用二分法处理,利用无递归的二分法算法实现题目要求的O(log n)的要求,然后利用前后遍历实现找到范围所在。但也要考虑到,当重复项过多,该算法会退化到O(n)的复杂度。
代码如下:

public int[] searchRange(int[] nums, int target) {
int len = nums.length;
int l =0; int r = len - 1;
int mid =(l+r)/2;
int i=0,j=0;
int []re = {-1,-1};
while(l<=r){
if(target<nums[l]||target>nums[r])
return re;
if(nums[mid]==target){
i = mid;
j = mid;
if(mid>0){
int t = i;
while(nums[--t]==target){
i=t;
if(i>0){
continue;
}else{
break;
}
}
}
if(mid<len-1){
int g =j;
while(nums[++g]==target){
j =g;
if(j<len-1){
continue;
}else{
break;
}
}
}
int []re1 = {i,j};
return re1;
}else if(nums[mid]<target){
l = mid+1;
}else{
r =mid-1;
}
mid =(l+r)/2;
}
return re;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: