zoukankan      html  css  js  c++  java
  • leetcode

    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.

    //利用二分,可是,这里要特殊处理,将数组分成两部分二分。时间复杂度O(logn)
    class Solution {
    public:
        int search(int A[], int n, int target) {
            return dfs(A,0,n-1,target);
        }
    private:
    	int dfs(int A[], int bgn, int end, int target)
    	{
    		if(bgn <= end)
    		{
    			int mid = bgn + (end - bgn) / 2;
    			if(A[mid] == target)
    			{
    				return mid;
    			}
    			if(A[bgn] <= A[mid])
    			{
    				if(A[bgn] <= target && target < A[mid])
    				{
    					dfs(A,bgn,mid-1,target);
    				}
    				else
    				{
    					dfs(A,mid+1,end,target);
    				}
    			}
    			else
    			{
    				if(A[mid] < target && target <= A[end])
    				{
    					dfs(A,mid+1,end,target);
    				}
    				else
    				{
    					dfs(A,bgn,mid-1,target);
    				}
    			}
    		}
    		else
    		{
    			return -1;
    		}
    	}
    };



  • 相关阅读:
    strstr 函数的实现
    函数模板与模板函数
    内核态和用户态
    最短路径算法(跟新SPFA,Ford)
    P1042 乒乓球
    P2347 砝码称重
    P1087 FBI树
    P1540 机器翻译
    P1028 数的计算
    P1067 多项式输出
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4386880.html
Copyright © 2011-2022 走看看