34. 在排序數組中查找元素的第一個和最后一個位置

自己做
解:二分查找

class Solution {
public://二分查找int halfFind(vector<int> nums, int begin, int end, int target){if(begin > end) //找不到的情況return -1;int mid = (begin + end) / 2;if(nums[mid] == target) //找到的情況return mid;if(nums[mid] > target) //中軸偏大,往左邊繼續找return halfFind(nums, begin, mid - 1, target);if(nums[mid] < target) //中軸偏小,往右邊繼續找return halfFind(nums, mid + 1, end, target);return 0; //應付LeetCode}vector<int> searchRange(vector<int>& nums, int target) {//二分查找到元素int len = nums.size();if(len == 0) //數組為空return {-1,-1}; int k = halfFind(nums, 0, len - 1, target);if(k == -1) //元素不存在return {-1,-1};//元素存在的情況int begin = k, end = k;//先往左邊找while(begin >= 0 && nums[begin] == target)begin--;//再往右邊找while(end < len && nums[end] == target)end++;return {begin + 1,end - 1};}
};

35. 搜索插入位置

自己做
解:二分查找

class Solution {
public://二分查找int halfFind(vector<int> nums, int begin, int end, int target){if(begin > end) //找不到的情況return end + 1; //返回要插入的下標int mid = (begin + end) / 2;if(nums[mid] == target) //找到的情況return mid;if(nums[mid] > target) //中軸偏大,往左邊繼續找return halfFind(nums, begin, mid - 1, target);if(nums[mid] < target) //中軸偏小,往右邊繼續找return halfFind(nums, mid + 1, end, target);return 0; //應付LeetCode}int searchInsert(vector<int>& nums, int target) {int len = nums.size();return halfFind(nums, 0, len - 1, target);}
};
