• LC.33. Search in Rotated Sorted Array


    https://leetcode.com/problems/search-in-rotated-sorted-array/description/
    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.

    time: o(logn) space: o(1)

    Find Minimum in Rotated Sorted Array类似。因为rotate, 所以不能直接用Binary Search, 需要进行 二次判定。

    case 1: nums[mid] == target, return mid.

    case 2: nums[mid] < nums[r]. 此时说明 右侧是正常升序,没有rotation, 若是这种情况下 target > nums[mid] && target <= nums[r] 就在右侧查找,其他情况左侧查找。

    case 3: nums[mid] > nums[r]. 此时说明 左侧是正常升序,没有rotation, 若是这种情况下 target < nums[mid] && target >= nums[l] 就在左侧查找,其他情况右侧查找

    note here since there is no duplicate and the left + 1 = mid will exit, there wouldnt be a case that the nums[left]= nums[mid] or nums[mid] == num[right]
    make sure also checks the LC.81

     1 public int search(int[] nums, int target) {
     2         if (nums == null || nums.length ==0 ) return -1 ;
     3         int left = 0, right = nums.length -1 ;
     4         while(left + 1 < right){
     5             int mid = left + (right-left)/2;
     6             if (nums[mid] == target) return mid ;
     7             //break into two parts: note, there is no duplicate
     8             //first half
     9             if (nums[left]< nums[mid] ){
    10                 if (target<=nums[mid] && nums[left] <=target){
    11                     right = mid ;
    12                 }else {
    13                     left = mid ;
    14                 }
    15             }
    16             //second half:注意判断顺序进行改变
    17             else if (nums[mid] < nums[right]){
    18                 if (nums[mid]<=target && target <= nums[right]){
    19                     left = mid ;
    20                 }else {
    21                     right = mid;
    22                 }
    23             }
    24         }
    25         //post processing for the left and right
    26         if (nums[left] == target){
    27             return left ;
    28         }
    29         if(nums[right] == target){
    30             return right;
    31         }
    32         return -1 ;
    33     }
     

  • 相关阅读:
    js事件之event.preventDefault()与event.stopPropagation()用法区别
    [转] The program can't start because api-ms-win-crt-runtime-l1-1-0.dll is missing
    [转] Visual Studio Code behind a proxy
    [转] js == 与 === 的区别
    [转]说说C#的async和await
    [转]Sublime Text3注册码(可用)
    Oracle 12c
    SQL Server死锁
    Initialize the Storage Emulator by Using the Command-Line Tool
    Microsoft Fakes
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8468655.html
Copyright © 2020-2023  润新知