• Leetcode-Search in Rotated Sorted Array


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

    Analysis:

    Suppose we have three pointers:start, mid and end. There are three case for the array between start and end:

    1. A[mid] < A[start]: Rotated, the maximum value is on the left of mid. If target < A[mid], then we search the left part; if target > A[mid], we then have two situations: (a) target <= A[end], we search the right part; (b) target > A[end], search the left part.

    2. A[mid] > A[end]: Rotated, the maximum value is on the right of mid. target > A[mid]: search the left part; target < A[mid] && < A[start]: search the right part; target < A[mid] && >= A[start]: search the left part.

    3. Otherwise: Not rotated. Just perform normal binary search.

    Solution:

     1 public class Solution {
     2     public int search(int[] A, int target) {
     3         if (A.length==0) return -1;
     4 
     5         int start = 0, end = A.length-1;
     6         int mid = -1;
     7 
     8         while (start<=end){
     9             mid = (start+end)/2;
    10             if (A[mid]==target) return mid;
    11 
    12             if (A[mid]<A[start]){
    13                 if (target<A[mid])
    14                     end = mid-1;
    15                 else if (target<=A[end])
    16                     start = mid+1;
    17                 else end = mid-1;
    18                 continue;
    19             }
    20 
    21             if (A[mid]>A[end]){
    22                 if (target>A[mid]) start = mid+1;
    23                 else if (target>=A[start]) end = mid-1;
    24                 else start = mid+1;
    25                 continue;
    26             }
    27 
    28             if (target<A[mid]) end = mid-1;
    29             else start = mid+1;
    30         }
    31 
    32         return -1;
    33     }
    34 }
  • 相关阅读:
    linux上安装mysql
    Linux上安装elasticsearch
    解决pyhton aiohttp ssl:None [[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)
    mysql数据库的数据变更事件获取以及相关数据
    [天下小黑盒]打地鼠小助手
    看到当年自己学SQL Server 的笔记
    CodeFirst EF中导航属性的个人理解
    在Win10下如何安装IMSL6.0
    商品中台三期压测
    压测
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4112428.html
Copyright © 2020-2023  润新知