您的位置:首页 > 编程语言 > Java开发

每日算法(十三)-java从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置

2019-05-07 20:06 113 查看

每日算法(十三)-java从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置

从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置
要求时间复杂度O(logn)
Example 1:
Input: nums = [5,7,7,8,8,8,10], target = 8
Output: [3,5]
Example 2:
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
这里因为是有序数组所以可以采用二分法来解决,分别找出第一次出现的位置和最后一次出现的位置
选出中间位置开始往两边走,不断的去找与目标元素相同的数的位置,如果没有则返回-1,有则返回位置下标
需要注意的是在找最后一次出现的时候,中间数的位置mid要+1,对应的边界也会发生相应变化,要不会越界

public static int searchfirst(int nums[],int target){
int left=0;
int right=nums.length-1;
int mid=0;
while(left<=right){
mid=(right+left)/2;
if(target>nums[mid]){
left=mid+1;
}else{
right=mid;
}if(right==left){
break;
}
}
if(nums[left]!=target){
return -1;
}else{
return left;
}
}

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