zoukankan      html  css  js  c++  java
  • 【LeetCode 33】搜索旋转排序数组

    题目链接

    【题解】

    会发现旋转之后,假设旋转点是i 则0..i-1是递增有序的。然后i..len-1也是递增有序的。 且nums[i..len-1]nums[0] 所以我们可以把数组分成两段了。 怎么判断我们二分中点的时候是处在哪一段中的呢? 当然就是让nums[mid]和nums[0]比较一下啦~ 情况比较多 我在代码里都交代清楚了

    【代码】

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int l,r;
            l = 0;r = ((int)nums.size()) - 1;
            while (l<=r){
                int mid = (l+r)/2;
                if (nums[mid]>=nums[0]){
                    //取的中间点在左边这一段。
                    if (target>=nums[0]){
                        //目标也在左边这一段,那就根据和它的大小比.
                        if(target<nums[mid]){
                            r = mid-1;
                        }else{
                            l = mid+1;
                        }
                    }else{
                        //目标不在左边这一段(即在右边那一段)
                        l = mid + 1;
                    }
                }else{
                    //取的中间点在右边这一段
                    if (target>=nums[0]){
                        //目标在左边那一段
                        r = mid-1;
                    }else{//在右边那一段
                        if (target<nums[mid]){
                            r = mid-1;
                        }else{
                            l = mid+1;
                        }
                    }
                }
            }
            if (l-1>=0 && target==nums[l-1]){
                return l-1;
            }else return -1;
        }
    };
    
  • 相关阅读:
    UVA1599 理想路径 Ideal Path(最短路径)
    换根DP
    小w的魔术扑克(树状数组+并查集)
    NOIP 2016蚯蚓(优先队列)
    ZR 动物园
    T105017 seq(DP)
    noip2017酱油记
    noip2017酱油记前篇
    P1985 翻转棋
    luogu P2512 [HAOI2008]糖果传递
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11846663.html
Copyright © 2011-2022 走看看