leetcode116:search-for-a-range
阿新 • • 發佈:2020-08-01
題目描述
給出一個有序陣列,請在陣列中找出目標值的起始位置和結束位置 你的演算法的時間複雜度應該在O(log n)之內 如果陣列中不存在目標,返回[-1, -1]. 例如: 給出的陣列是[5, 7, 7, 8, 8, 10],目標值是8, 返回[3, 4].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 ofO(logn).
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].
示例1
輸入
複製[5, 7, 7, 8, 8, 10],8
輸出
複製[3,4]
class Solution {
public:
/**
*
* @param A int整型一維陣列
* @param n int A陣列長度
* @param target int整型
* @return int整型vector*/
vector<int> searchRange(int* A, int n, int target) {
// write code here
vector< int> res(2,-1);
if (A==nullptr || n<=0)
return res;
int low=lower_bound(A, A+n, target)-A;
if (low==n || A[low]!=target)
return res;
else res[0]=low;
int high=upper_bound(A, A+n,target)-A-1;
res[1]=high;
return res;
}
};
class Solution {
public:
/**
*
* @param A int整型一維陣列
* @param n int A陣列長度
* @param target int整型
* @return int整型vector
*/
vector<int> searchRange(int* A, int n, int target) {
// write code here
vector<int> res(2,-1);
if (A==nullptr || n<=0)
return res;
int low=0,high=n-1;
while (low<=high)
{
int middle =(high+low)>>1;
if (A[middle]<target)
low=middle+1;
else
high=middle-1;
}
int low2=0,high2=n-1;
while (low2<=high2)
{
int middle2=(high2+low2)>>1;
if (A[middle2]<=target)
low2=middle2+1;
else
high2=middle2-1;
}
if (low<=high2){
res[0]=low;
res[1]=high2;
}
return res;
}
};