LeetCode34. Find First and Last Position of Element in Sorted Array數組
題意:找出指定元素出現的範圍,Olognide
思路:兩次二分spa
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 Arraycode
在旋轉過的有序數組中查找指定元素blog
二分查找就是判斷target在前一半仍是後一半,根據mid和兩端元素的大小能夠獲得哪一半是有序的get
就能夠判斷target在不在這一半里it
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; } };