本文共 1308 字,大约阅读时间需要 4 分钟。
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
class Solution {public: vector searchRange(vector & nums, int target) { if(nums.size()==0) return {-1,-1}; if(nums.size()==1 && nums[0]==target) return {0,0}; else if(nums.size()==1) return {-1,-1}; int mid=0; int left=0; int right=nums.size()-1; while(left <= right){ mid=(left+right)/2; if(nums[mid] == target){ int i=mid-1,j=mid+1; while(i>=0){ if(nums[i] == target){ i--; } else{ break; } } while(j < nums.size()){ if(nums[j] == target){ j++; } else{ break; } } return {i+1,j-1}; } else if(nums[mid] > target) right=mid-1; else if(nums[mid] < target) left=mid+1; } return {-1,-1}; }};
通过时间:
转载地址:http://liemb.baihongyu.com/