LeetCode34. Find First and Last Position of Element in Sorted Array
题意:找出指定元素出现的范围,Ologn
思路:两次二分

class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int l = 0, r = nums.size() - 1; int lx = -1, rx = -1; while (l <= r) { int mid = (l + r) >> 1; if (nums[mid] < target) { l = mid + 1; } else if (nums[mid] > target) { r = mid - 1; } else { lx = mid; r = mid - 1; } } l = 0, r = nums.size() - 1; while (l <= r) { int mid = (l + r) >> 1; if (nums[mid] < target) { l = mid + 1; } else if (nums[mid] > target) { r = mid - 1; } else { rx = mid; l = mid + 1; } } vector<int> res; res.push_back(lx); res.push_back(rx); return res; } };
LeetCode33. Search in Rotated Sorted Array
在旋转过的有序数组中查找指定元素
二分查找就是判断target在前一半还是后一半,根据mid和两端元素的大小可以得到哪一半是有序的
就可以判断target在不在这一半里

class Solution { public: int search(vector<int>& nums, int target) { int l = 0, r = nums.size() - 1; while (l <= r) { int mid = (l + r) >> 1; if (nums[mid] == target) return mid; if (nums[mid] > nums[r]) { if (target < nums[mid] && target >= nums[l]) { r = mid - 1; } else { l = mid + 1; } } else { if (target > nums[mid] && target <= nums[r]) { l = mid + 1; } else { r = mid - 1; } } } return -1; } };