Search in Rotated Sorted Array II

题目:Follow up for "Search in Rotated Sorted Array":

What if duplicates are allowed ? Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

思路:

题目说有重复数字,但是用之前的代码不影响的,只需要修改为bool变量就行。

之前的-1改成false,之前的返回某一位变成存在。即true,本质上变得更加简单。

很快accepted!

参考:Search in Rotated Sorted Array

代码:

class Solution {
public:
//https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
    bool search(vector<int>& nums, int target) {
        int len=nums.size();
        //找到第一个变小的值下,写一个新函数
        int left=0,right=len-1;
        int f=findFirstBig(nums);
        if(f==0){
            return binareSearch(f,len,nums,target);
        }else{
            if(nums[f-1]>=target){
                left= binareSearch(0,f-1,nums,target);
                if(left!=false) return left;
            }
            if(nums[f]<=target){
                right= binareSearch(f,len-1,nums,target);
                if(right!=false) return right;
            }
            
            return false;
        }
        
    }
    
    //二分查找
    int binareSearch(int i,int j,vector<int>& nums,int target){
        while(i<=j){
            int mid=(i+j)/2;
            if(nums[mid]==target){
                return true;
            }
            if(nums[mid]<target){
                i=mid+1;
            }
            if(nums[mid]>target){
                j=mid-1;
            }
        }
        if(i>j){
            return false;
        }
    }
    
    //找到第一个减小的数值
    int findFirstBig(vector<int>& nums){
        int len=nums.size();
        for(int i=0;i<len;i++){
            if(i>0&&nums[i]<nums[i-1]){
                return i;
            }
        }
        return 0;
    }
};


原文地址:https://www.cnblogs.com/jsrgfjz/p/8519875.html