
详细思路
二分,先判断mid,不行,如果0到mid有序,此时如果target在left到mid之间,right去左边,否则,left去右边,同理mid到n-1有序
精确定义
left左边数组第一个
mid左边数组最后一个,右边数组第一个
right右边数组最后一个
class Solution { public: int search(vector<int>& nums, int target) { int n=nums.size(); if(n==1)return nums[0]==target?0:-1; int left=0,right=n-1; while(left<=right){ int mid=left+(right-left)/2; if(nums[mid]==target)return mid; if(nums[0]<=nums[mid]){ if(nums[left]<=target&&target<nums[mid])right=mid-1; else left=mid+1; } else if(nums[mid]<=nums[n-1]){ if(nums[mid]<target&&target<=nums[right])left=mid+1; else right=mid-1; } } return -1; } };
踩过的坑
while(left<=right){
if(nums[0]<=nums[mid]){
浙公网安备 33010602011771号