problem: https://leetcode.com/problems/search-in-rotated-sorted-array/
二分搜索题。检查二分后的半段是否满足递增条件,如果满足且数据落在这一区间,就在这一区间查找,否则到另一区间查找。
class Solution { public: int search(vector<int>& nums, int target) { if(!nums.size()) return -1; int low = 0; int high = nums.size() - 1; while (low < high) { int mid = (low + high) / 2; if (nums[mid] == target) return mid; if (nums[low] <= nums[mid]) { if (target >= nums[low] && target < nums[mid]) // it's ascending { high = mid - 1; } else { low = mid + 1; } } else { if (target > nums[mid] && target <= nums[high]) // it's ascending { low = mid + 1; } else { high = mid - 1; } } } return nums[low] == target ? low : -1; } };