zoukankan      html  css  js  c++  java
  • 【Leetcode】33. Search in Rotated Sorted Array

    问题描述:

      二分查找,有序翻转后的数组上进行查找 ,返回下标。

    问题分析:

      这题关键在于找到一个性质,就是如果这个数组确实被翻转过,那么 一定有a[0] > a[n],所以根据这个条件来判断,当前l r 是否在单调区间上。

    问题解决:

      首先判断target所在区间,然后判断m所在区间,最后先将l 或者 r 往target区间上靠, 然后把m往target上靠。

    代码如下:

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int l = 0, r = nums.size() - 1, m;
            while(l <= r){
                m = (l + r)>>1;
                if(nums[m] == target)
                    return m;
                if(nums[l] <= nums[r]){
                    if(nums[m] < target)
                        l = m + 1;
                    else
                        r = m - 1;
                }else{
                    if(target >= nums[l]){//target在左侧区间
                        if(nums[m] < nums[r])//m在右侧区间
                            r = m - 1;//让m 左移
                        else{// m在左侧区间
                            if(nums[m] > target) 
                                r = m - 1;
                            else 
                                l = m + 1;
                        }
                    } 
                    else{//target在右侧区间
                        if(nums[m] > nums[r])//m在左侧区间
                            l = m + 1;//让m 右移
                        else{//m在右侧区间
                            if(nums[m] > target) 
                                r = m - 1;
                            else 
                                l = m + 1;
                        }
                    }
                      
                }
            }
            return  -1;
        }
    };
  • 相关阅读:
    第12章 Swing编程
    第11章 AWT编程
    第10章 异常处理
    第9章 泛型
    Java 实例
    Spring 框架 (持续完善中)
    Java 程序员必备的5个框架 (持续完善中)
    IDEA 中建立Java项目步骤
    Java 实例
    Java 实例
  • 原文地址:https://www.cnblogs.com/luntai/p/5408218.html
Copyright © 2011-2022 走看看