zoukankan      html  css  js  c++  java
  • 33. Search in Rotated Sorted Array (Array;Divide-and-Conquer)

    Suppose a sorted array is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    You are given a target value to search. If found in the array return its index, otherwise return -1.

    You may assume no duplicate exists in the array.

    思路: 改动的二分法。有三种情况:正序、右侧rotate、左侧rotate。三种情况分别讨论。

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            return binarySearch(nums,0,nums.size()-1, target);
        }
        
        int binarySearch(vector<int>& nums, int start, int end, int target){
            if(start==end){
                if(nums[start]==target) return start;
                else return -1;
            }
            
            int mid = start+ ((end-start)>>1);
            
            //正序
            if(nums[mid]>=nums[start] && nums[mid]<nums[end]){ //mid可能会=start,所以这里要用>=
                if(target <= nums[mid]) return binarySearch(nums,start,mid,target); //mid肯定<end,所以至少舍弃了一个
                else return binarySearch(nums,mid+1,end,target); //mid+1,至少舍弃了一个
            }
            
            //右侧rotate
            else if(nums[mid]>=nums[start] && nums[mid]>nums[end]){
                if(target>=nums[start] && target<=nums[mid]) return binarySearch(nums,start,mid,target);
                else return binarySearch(nums,mid+1,end,target);
            }
            
            //左侧rotate
            else{
                if(target>=nums[start] || target<=nums[mid]) return binarySearch(nums,start,mid,target);
                else return binarySearch(nums,mid+1,end,target);
            }
        }
    };
  • 相关阅读:
    linux下的shell 快捷键
    Python3.x和Python2.x的区别
    [Python2.x] 利用commands模块执行Linux shell命令
    redis缓存策略
    高并发解决方案
    java8 lambda表达式应用
    java读写分离的实现
    数据库读写分离
    大数据量处理方案:分布式数据库
    google的CacheBuilder缓存
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/5877239.html
Copyright © 2011-2022 走看看