码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode数组类的题目提交记录 【2】

时间:2017-12-27 11:54:40      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:search   blog   --   targe   end   continue   查找   sts   记录   

/***********************************************************************
33. Search in Rotated Sorted Array

Suppose an array sorted in ascending order 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.


eg: 

0 1 2 3 4//右边有序情况
4 0 1 2 3//右边有序情况
3 4 0 1 2//右边有序情况

2 3 4 0 1//左边有序情况
1 2 3 4 0//左边有序情况
**************************************************************/

//代码提交1

//循环法---查找
int search(int* nums, int numsSize, int target) {
    int Left= 0;
    int Right = numsSize - 1;
    int Middle;
    while (Left <= Right)
    {
        Middle = (Left + Right) / 2;

        if (target == *(nums + Middle))
        {
            return Middle;
        }

        if (*(nums + Middle) < *(nums + Right))
        {//右边有序情况

            //1.把目标在限制死在中间值的  右边
            if (*(nums + Middle) < target &&  *(nums + Right) >= target)
                Left = Middle + 1;

            //2.其他情况则目标在中间值的 左边
            else 
                Right = Middle - 1;

            continue;
        }

        if (*(nums + Middle) > *(nums + Right))
        {//左边有序情况

            //1.把目标限制死在中间值的 左边
            if (*(nums + Middle) > target &&  *(nums + Right) < target)
                Right = Middle - 1;
                
            //2.其他情况则目标在中间值的 右边
            else
                Left = Middle + 1;

            continue;
        }

        return -1;

    }
    return -1;
}

 

  

//代码提交2
//递归法---查找
int searchFun(int* nums, int nLeft,int nRight,int ntargrt) {
    int Left = nLeft;
    int Right = nRight;
    int Middle = (Left + Right) / 2;

    if (Left <= Right)
    {
        if (*(nums + Middle) == ntargrt) {
            return Middle;
        }

        if (*(nums + Middle) < *(nums + Right))
        {
            if (*(nums + Middle) < ntargrt && ntargrt <= *(nums + Right)) 
            {
                Left = Middle + 1;
                return searchFun(nums,Left,Right,ntargrt);
            }
            else            
            {
                Right = Middle - 1;
                return searchFun(nums, Left, Right, ntargrt);
            }
        }

        if (*(nums + Middle) > *(nums + Right)) 
        {
            if (*(nums + Middle) > ntargrt && ntargrt > *(nums + Right))
            {
                Right = Middle - 1;
                return searchFun(nums, Left, Right, ntargrt);
            }
            else 
            {
                Left = Middle + 1;
                return searchFun(nums, Left, Right, ntargrt);
            }
        }

        return -1;
    }

    return -1;
}
int search(int* nums, int numsSize, int target) {
    int Left = 0;
    int Right = numsSize - 1;

    int resultNum = searchFun(nums,Left,Right,target);
    return resultNum;
}

 

  

 

LeetCode数组类的题目提交记录 【2】

标签:search   blog   --   targe   end   continue   查找   sts   记录   

原文地址:https://www.cnblogs.com/iamcdx-2017/p/8124372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!