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;
        }
  • 相关阅读:
    css3新特性总结
    ES6常用特性总览
    前端第一次面试
    将一个行数在主线程执行的4中方法
    判断邮箱格式和图片压缩
    上传图片的实现
    导航右侧添加按钮、隐藏导航条和状态栏
    从相册选取图片展示并实现自定义事件
    cell添加选中时的背景图片、显示图片和图片自适应框的大小
    设置键盘无色和状态栏风火轮、屏幕截图
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5566373.html
Copyright © 2011-2022 走看看