Skip to content

Latest commit

 

History

History
91 lines (73 loc) · 2.13 KB

81. Search in Rotated Sorted Array II.md

File metadata and controls

91 lines (73 loc) · 2.13 KB

leetcode Daily Challenge on November 20th, 2020.


Difficulty : Medium

Related Topics : ArrayBinarySearch


Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).

You are given a target value to search. If found in the array return true, otherwise return false.

Example 1:

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

Example 2:

Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false

Follow up:

  • This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates.
  • Would this affect the run-time complexity? How and why?

Solution

  • mine
    • Java
      • ``
        
        

  • the most votes
    • Runtime: 0 ms, faster than 100.00%, Memory Usage: 38.9 MB, less than 38.27% of Java online submissions
      public boolean search(int[] nums, int target) {
          if (nums == null || nums.length == 0) return false;
      
          int start = 0;
          int end = nums.length - 1;
          while (start <= end) {
              int mid = (start + end) >>> 1;
              if (nums[mid] == target) return true;
      
              if (nums[start] == nums[mid]) {
                  start++;
                  continue;
              }
              //first part is orderly
              if (nums[start] < nums[mid]) {
                  if (nums[mid] > target && nums[start] <= target) {
                      //target in the first part
                      end = mid - 1;
                  } else {
                      start = mid + 1;
                  }
              } else {
                  //last part is orderly
                  if (nums[mid] < target && nums[end] >= target) {
                      //target in the end part
                      start = mid + 1;
                  } else {
                      end = mid - 1;
                  }
              }
          }
          return false;
      }