题目
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
思路
采用双指针法,从开头和结尾分别搜索target,一开始代码很简单,但是考虑因素不全,加了一堆if else判断
#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> result;
if (nums.size() ==0)
{
result.push_back(-1);
result.push_back(-1);
return result;
}
int left = 0, right = nums.size() - 1;
while (right > left)
{
do
{
++left;
}
while (nums[left] != target && left < nums.size() - 1);
do
{
--right;
}
while (nums[right] != target && right > 0);
}
if (nums.size() == 1 && nums[0] == target)
{
result.push_back(0);
result.push_back(0);
return result;
}
else if (nums.size() == 1 && nums[0] != target)
{
result.push_back(-1);
result.push_back(-1);
return result;
}
else if (right == 0 && left == nums.size() -1 && nums[left] != nums[right] )
{
result.push_back(-1);
result.push_back(-1);
return result;
}
else if (nums[left] == target && nums[right] == target)
{
result.push_back(right);
result.push_back(left);
return result;
}
}
};
int main(int argc, char* argv[])
{
vector<int> test = { 5,7,7,8,8,10 };
int target = 8;
vector<int> result = Solution().searchRange(test, target);
system("pause");
return 0;
}
网友评论