zoukankan      html  css  js  c++  java
  • LeetCode-Search in Rotated Sorted Array

    题目:

      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.

    思路分析:

    (1)如果left<right,直接用二分搜索

    (2)if left>right

         则 mid=(left+right)>>1;

      if (A[mid])==target 则停止

      else find(A,left,mid-1,target)与find(A,mid+1,right,target).

    源代码:

    class Solution {
    public:
        int search(int A[], int n, int target) {
            return find(A,0,n-1,target);
        }
        
    private:
       int find(int A[],int left,int right,int target){
           if(left>right) return -1;
           
           int idx=-1;
           
           if(A[left]<=A[right]){
               while(left<=right){
                   int mid=(left+right)>>1;
                   
                   if(A[mid]==target){
                       idx=mid;
                       break;
                   }
                   else if(A[mid]>target) right=mid-1;
                   else left=mid+1;
               }
           }
           
           else{
               int mid=(left+right)>>1;
               if(A[mid]==target) idx=mid;
               else{
                   idx=find(A,left,mid-1,target);
                   idx=((idx==-1)?find(A,mid+1,right,target):idx);
               }
           }
           return idx;
       }
    };

     

  • 相关阅读:
    callback的实现
    TypeId和IidManager关系
    Blocks的实现
    定义返回Block的函数
    NSString与奇怪的retainCount
    ARC下的所有权修饰符
    MAC安装MYSQL
    找出数组中只出现一次的数
    写在复习MVC后
    UITableViewHeaderFooterView的封装
  • 原文地址:https://www.cnblogs.com/sixue/p/4086886.html
Copyright © 2011-2022 走看看