题目:
给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
思路:
1、直接遍历数组,复杂度O(n)
2、二分查找
先通过二分查找,找到target出现的最左边的位置,如果不存在,返回-1;
再通过二分查找,找到target出现的最右边的位置,如果不存在,返回-1;
代码:
#include#include using namespace std;int searchLeft(const vector &A,int left,int right,int target){ int first=left; int last=right; int mid=-1; while(first<=last){ mid=first+((last-first)>>1); if(A[mid]==target){ if(mid>left && A[mid-1]==target) last=mid-1; else return mid; } else if(A[mid]