二分查找的改进

在转动过的有序数组中寻找目标值

http://www.nowcoder.com/questionTerminal/7cd13986c79d4d3a8d928d490db5d707

  • 本题的调试有点问题。。

一、暴力『不是最优』

class Solution {
public:
    /**
     * 
     * @param A int整型一维数组 
     * @param n int A数组长度
     * @param target int整型 
     * @return int整型
     */
    int search(int* A, int n, int target) {
        // write code here
        int loop=n;
        while( loop-- )
        {
            if( A[loop]==target )
            {
                return loop;
            }
        }

        return -1;

    }
};

二、改进的『二分查找』

参考牛油lzx071021

//不要被“旋转”而迷惑,“有序”并不是二分查找的核心
    // 二分查找的核心是"通过界桩快速决定查找方向,大幅缩短查找空间"
    // 只要能快速确定界桩,就能使用二分查找
    // 充分利用有序数组能够快速获取边界值的特性
    // 利用这一特性可以快速确定目标值应处的区间
class Solution {
public:
    /**
     * 
     * @param A int整型一维数组 
     * @param n int A数组长度
     * @param target int整型 
     * @return int整型
     */
    int search(int* A, int n, int target) {
        // write code here
        int Left=0,Right=n-1,mid;

        while( Left<=Right )
        {
            mid= Left + (Right-Left)/2;

            if( A[mid]==target )
            {
                return mid;
            }

            //左边的有序区间
            if( A[mid]>=A[Left] )
            {
                if( A[Left]<=target && target<A[mid])
                {
                    Right=mid-1;
                }
                else 
                {
                    Left=mid+1;
                }
            }
            else 
            {
                if( A[mid]<target && target<=A[Right] )
                {
                    Left=mid+1;
                }
                else 
                {
                    Right=mid-1;
                }

            }


        }

        //没有找到的话
        return -1;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 15:19
简历上能写3个月吗?
码农索隆:大胆写,主要你能把实习经历包装好,可以看一下我这篇帖子https://www.nowcoder.com/share/jump/4888395581180798063
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务