zoukankan      html  css  js  c++  java
  • 33. 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
    class Solution {
    
        public int search(int[] nums, int target) {
            
            if(nums.length == 0 || nums == null) return -1;
            int left = 0, right = nums.length - 1;   
            while(left <=right){
                int mid = left + (right - left)/2;
                if(nums[mid]==target) return mid;
                else if(nums[mid] < nums[left]){
                    if(target > nums[mid] && target <= nums[right]) left = mid +1;
                    else right = mid-1;
                }
                else
                    if(target< nums[mid] && target >= nums[left]) right = mid-1;
                        else left = mid+1;
            }
            return -1;
        }
    }

    二分法,关键在找分界点。

    参考 http://www.cnblogs.com/grandyang/p/4325648.html

     总结:

    Since the array is partial sorted, we use binary search to save time. Aftrer getting the mid point, the key point is to find which part is sorted. So we compare mid with left, if mid > left means left part is sorted, then we shrink our range by comparing the target number with left part sorted array, cuz we know it is exactly correct. Only if it's sorted, we can compare.

    If mid < left, means the rotate part is in the left, and right part should be sorted. We do the same as above.

  • 相关阅读:
    以太坊解析:默克尔树、世界状态、交易及其他
    IIS6服务器的请求流程(图文&源码)
    IIS6服务器的请求流程(图文&源码)
    IIS6服务器的请求流程(图文&源码)
    IIS6服务器的请求流程(图文&源码)
    DAY1--python入门
    DAY1--python入门
    DAY1--python入门
    DAY1--python入门
    Java中创建对象的5种方式
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/10329818.html
Copyright © 2011-2022 走看看