当前位置: 代码迷 >> 综合 >> Leetcode search-arr-range
  详细解决方案

Leetcode search-arr-range

热度:43   发布时间:2024-02-01 23:12:30.0

题目描述

给出一个有序数组,请在数组中找出目标值的起始位置和结束位置

你的算法的时间复杂度应该在O(log n)之内

如果数组中不存在目标,返回[-1, -1].

例如:

给出的数组是[5, 7, 7, 8, 8, 10],目标值是8,

返回[3, 4].

 

 

思路一:

先采取二分思路,查找到中间节点mid=target时,然后向两端拓展 找到left right边界

不足:最坏时间复杂度 O(N)  当数组全部为target元素时发生

 

思路二:

二分分别查找 left  right两个端点

 

易错点:  while循环为 left<=right   并且最终的边界  需要判断是否符合  即边界必须存在 且其值为target

vector<int> searchRange(int* A, int n, int target) {// write code herevector<int> res;int l1=0,r1=n-1;while(l1<=r1){int mid=(l1+r1)/2;if(A[mid]<target)l1=mid+1;elser1=mid-1;}//最终 l1是第一个targetif(l1>=0 && l1<n && A[l1]==target)res.push_back(l1);elseres.push_back(-1);int l2=0,r2=n-1;while(l2<=r2){int mid=(l2+r2)/2;if(A[mid]>target)r2=mid-1;elsel2=mid+1;}//最终 r2是最后一个targetif(r2>=0 && r2<n && A[r2]==target)res.push_back(r2);elseres.push_back(-1);return res;}

 

  相关解决方案