假設按照升序排序的數組在預先未知的某個點上進行了旋轉。
( 例如,數組?[0,1,2,4,5,6,7]?可能變為?[4,5,6,7,0,1,2]?)。
搜索一個給定的目標值,如果數組中存在這個目標值,則返回它的索引,否則返回?-1?。
你可以假設數組中不存在重復的元素。
你的算法時間復雜度必須是?O(log?n) 級別。
示例 1:
輸入: nums = [4,5,6,7,0,1,2], target = 0
輸出: 4
示例?2:輸入: nums = [4,5,6,7,0,1,2], target = 3
輸出: -1來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解法:
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) return mid;if (nums[mid] < nums[right]) {if (nums[mid] < target && nums[right] >= target) left = mid + 1;else right = mid - 1;} else {if (nums[left] <= target && nums[mid] > target) right = mid - 1;else left = mid + 1;}}return -1;}
};
?