题目
给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]
。
进阶:
你可以设计并实现时间复杂度为
O(log n)
的算法解决此问题吗?
示例
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
输入:nums = [], target = 0
输出:[-1,-1]
思路(暴力法)
首先的话是可以很自然的想到暴力法解决,定义一个vector<int> ans
,首先判断nums
的长度,为0的话就直接返回[-1,-1]
,不为0再开启下面的寻找。
接着遍历数组,找到第一个等于target
的下标i
,存入ans
中,以i的下一个下标开始寻找返回的第二个下标值。
直到nums[j] != target
后把j-1
存入ans
中,完成。
如果一直没有进入上述情况,即数组nums
中不存在target
值,就返回[-1,-1]
。
代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> ans;
int n = nums.size();
if(n == 0)
return {
-1,-1};
for