Computer >> Máy Tính >  >> Lập trình >> Python

Tìm kiếm trong Mảng được sắp xếp xoay vòng II bằng Python

Hãy xem xét chúng ta có một mảng được sắp xếp theo thứ tự tăng dần. Điều đó được xoay ở một số trục mà chúng ta chưa biết trước. Ví dụ:nếu mảng giống như [0,0,1,2,2,5,6], thì mảng này có thể trở thành [2,5,6,0,0,1,2]. Chúng tôi có một giá trị mục tiêu để tìm kiếm. Nếu điều đó được tìm thấy trong mảng, thì trả về true, nếu không thì trả về false. Vì vậy, nếu mảng giống như [2,5,6,0,0,1,2] và mục tiêu là 0, thì kết quả đầu ra sẽ là 0

Hãy để chúng tôi xem các bước -

  • low:=0 và high:=kích thước của mảng
  • trong khi thấp
  • giữa:=low + (cao - thấp) / 2
  • nếu nums [mid] =target, thì trả về true
  • nếu nums [low] =nums [mid] và nums [high - 1] =nums [mid], thì
    • tăng mức thấp 1 và giảm mức cao 1 và tiếp tục cho lần lặp tiếp theo
  • nếu nums [low] <=nums [mid], thì
    • if target> =nums [low] và target &miinus; nums [giữa], sau đó cao:=giữa, ngược lại thấp:=giữa + 1
  • Mặt khác
    • nếu target <=nums [high - 1] và target> nums [mid] thì low:=mid + 1, ngược lại high:=mid
  • trả về false
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    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))

    Đầu vào

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

    Đầu ra

    True