Search in Rotated Sorted Array II in Python

PythonServer Side ProgrammingProgramming

Consider we have an array sorted in ascending order. That is rotated at some pivot unknown to us beforehand. For example, if the array is like [0,0,1,2,2,5,6], this might become [2,5,6,0,0,1,2]. We have a target value to search. If that is found in the array, then return true, otherwise return false. So if the array is like [2,5,6,0,0,1,2], and target is 0, then the output will be 0

Let us see the steps −

  • low := 0 and high := size of array
  • while low < high
    • mid := low + (high - low)/2
    • if nums[mid] = target, then return true
    • if nums[low] = nums[mid] and nums[high - 1] = nums[mid], then
      • increase low by 1 and decrease high by 1, and continue for the next iteration
    • if nums[low] <= nums[mid], then
      • if target >= nums[low] and target &miinus; nums[mid], then high := mid, otherwise low := mid + 1
    • Otherwise
      • if target <= nums[high - 1] and target > nums[mid], then low := mid + 1, otherwise high := mid
  • return false

Let us see the following implementation to get better understanding −

Example

 Live Demo

class Solution(object):
   def search(self, nums, target):
      low = 0
      high = len(nums)
      while low<high:
         mid = low + (high-low)//2
         if nums[mid] == target:
            return True
         if nums[low] == nums[mid] and nums[high-1] == nums[mid]:
            low +=1
            high -=1
            continue
         if nums[low]<=nums[mid]:
            if target >=nums[low] and target <nums[mid]:
               high = mid
            else:
               low = mid+1
         else:
            if target<=nums[high-1] and target>nums[mid]:
               low = mid+1
            else:
               high = mid
      return False
ob1 = Solution()
print(ob1.search([2,5,6,0,0,1,2], 0))

Input

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

Output

True
raja
Published on 28-Apr-2020 11:02:03
Advertisements