leetcode#34. Find First and Last Position of Element in Sorted Array
给定一个按照升序排列的整数数组 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]
需要查看更优解。。写得太恶心了
class Solution { public: //这道题一点不好的地方是,C++以开区间作为结束位置 //1,2,3,4,5, 5, 5, 5, 7, 7, 8, 8, 8, 8, 10,11,19 vector<int> searchRange(vector<int>& nums, int target) { if(nums.size()==0) return {-1,-1}; vector<int> res(2, -1);//2个-1 int left = 0, right = nums.size()-1; while (left < right)//34 { int mid = left + (right - left) / 2; if (nums[mid] < target) left = mid+1;//保证left<=target,等于时,始终是左边第一个8 else //即使出现一群目标里,也可以用right来缩小范围 right = mid;//8可以作为mid,788-》78 } if (nums[left] != target) return res;//!!!!!!!!!!!!!!!!这是中点,如果没有值,left==right res[0] = left; right = nums.size(); while (left < right) //88888999 { int mid = left + (right - left) / 2; if (nums[mid] <= target) left = mid + 1; else right= mid;//而在这里,右边始终是大于8的数 } res[1] = left - 1; return res; } };

浙公网安备 33010602011771号