zoukankan      html  css  js  c++  java
  • leetcode33. Search in rotated sorted array

    问题描述:

    Suppose an array sorted in ascending order 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.

    Your algorithm's runtime complexity must be in the order of O(log n).

    Example 1:

    Input: nums = [4,5,6,7,0,1,2], target = 0
    Output: 4
    

    Example 2:

    Input: nums = [4,5,6,7,0,1,2], target = 3
    Output: -1

    解题思路:

    这道题要求用logN的方法解决,我们就可以开始考虑二分搜索了。

    这道题也不能简简单单的就用二分搜索了,因为并不是单调的排序,在某个不知道的地方,它rotate了一下。

    这里就需要我们观察!

    通过给的例子:[0,1,2,4,5,6,7] -> [4,5,6,7,0,1,2]

    可以看出可能有以下rotate:

    [1,2,4,5,6,7,0]

    [2,4,5,6,7,0,1]

    [4,5,6,7,0,1,2]

    [5,6,7,0,1,2,4]

    [6,7,0,1,2,4,5]

    [7,0,1,2,4,5,6]

    我们可以看出:当中间的数字小于最右时,右半部分为有序; 当中间的数字大于最左时,左半部分为有序

    可以用这个与二分搜索相结合。

    代码:

    class Solution {
    public:
        int search(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]){
                    if(nums[mid] < target && target <= nums[right]){
                        left = mid + 1;
                    }else{
                        right = mid - 1;
                    }
                }else{
                    if(nums[left] <= target && nums[mid] > target)
                        right = mid-1;
                    else
                        left = mid + 1;
                }
            }
            return -1;
        }
    };
  • 相关阅读:
    Web--2019年5月7日移动端随笔
    Web-css3--19年5月5日随笔
    数据库指令----4月10日
    19--3--14--数据处理
    微信小程序全选,微信小程序checkbox,微信小程序购物车
    手机预览微信小程序
    原生H5页面模拟APP左侧滑动删除效果
    微信小程序实例:实现tabs选项卡效果
    CSS3文本溢出显示省略号
    前端自动化之路之gulp,node.js
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9120177.html
Copyright © 2011-2022 走看看