zoukankan      html  css  js  c++  java
  • 33 Search in Rotated Sorted Array

    uppose 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.

    ================

    二分搜索

    解决思路:

    /**
    012 3 4567
    701 2 3456
    670 1 2345
    567 0 1234
    456 7 0123
    345 6 7012
    234 5 6701
    123 4 5670
    */

    可以看到数组旋转的各种情况,mid将数组分为左右两部分

    nums[mid]<nums[right],那么右边的部分是有序的

      因为右边部分有序,那么我可以在有序的部分判断:是否存在target值;如果有序的部分不存在target,那么在数组的左边部分寻找。

        我觉得这左右两部分的判断条件是不等价的,我们只能用排除法,先在有把握的部分搜索,这部分能找到更好。不能找到呢,换成另外的部分。

    如果nums[mid] > nums[left],那么左边的部分是有序的。

      我们再在有序的部分寻找。。。。。

    int search(const vector<int> &nums,int target){
            if(nums.size()==0)return -1;
            int left = 0;
            int right = nums.size()-1;
            while(left<=right){
                int mid = (left+right)/2;
                if(nums[mid]==target) return mid;
                else if(nums[mid]<nums[right]){
                    ///the right part is sorted
                    if(nums[mid]<target && nums[right]>=target)
                        left = mid+1;
                    else
                        right = mid-1;
                }else{
                    ///the left part is sorted
                    if(nums[mid]>target && nums[left]<=target)
                        right = mid-1;
                    else
                        left = mid+1;
                }
            }///while
            return -1;
        }
  • 相关阅读:
    Maven篇----04 mvn 常用命令
    Maven篇----03 私服配置&使用
    Maven篇----02 Nexus2私服管理
    Maven篇----01 简介&Maven私服
    SonarQube 系列之 — 04 插件扩展
    SonarQube 系列之 — 02 配置与管理
    SonarQube 系列之 — 01 安装和扫描
    JMeter 系列之—-05 支持CI扩展
    一些关于常见的进制教程
    【pic+js+gh】免费高速图床方案
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5566373.html
Copyright © 2011-2022 走看看