34. 在排序数组中查找元素的第一个和最后一个位置
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了34. 在排序数组中查找元素的第一个和最后一个位置相关的知识,希望对你有一定的参考价值。
- 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
class Solution {
public int[] searchRange(int[] nums, int target) {
return searchRange(nums,0,nums.length-1,target);
}
public static int[] searchRange(int[] nums,int start,int end, int target) {
// 找不到
if(nums.length == 0 || target < nums[start] || target > nums[end]){
return new int[]{-1,-1};
}
int m = (start+end) / 2;
if(nums[m] == target){
int left = m -1, right = m;
while(left >= start){
if(nums[left] == target){
left--;
continue;
}
break;
}
while(right <= end){
if(nums[right] == target){
right++;
continue;
}
break;
}
if((right-left-1) == 1){
return new int[]{left+1,left+1};
}else{
return new int[]{left+1,right-1};
}
}if(nums[m] < target){
return searchRange(nums, m + 1, end, target);
}else{
return searchRange(nums, 0, m-1, target);
}
}
}
以上是关于34. 在排序数组中查找元素的第一个和最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章
java刷题--34在排序数组中查找元素的第一个和最后一个位置
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 | Python
算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)