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;
        }
  • 相关阅读:
    卸载软件
    SourceTree安装
    lombok安装及使用
    Element学习使用
    Vue基础学习
    SpringBoot与Swagger整合
    @Valid 数据校验 + 自定义全局异常信息
    Spring Boot 运行原理
    JNDI学习总结(一):JNDI到底是什么?
    Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5566373.html
Copyright © 2011-2022 走看看