From a449abf709839079c3a556db50bcd46828f5a9b4 Mon Sep 17 00:00:00 2001 From: marina <138340846+bt3gl-cryptography@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:39:08 -0700 Subject: [PATCH] Create bs_rotated_array.py --- searching/bs_rotated_array.py | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 searching/bs_rotated_array.py diff --git a/searching/bs_rotated_array.py b/searching/bs_rotated_array.py new file mode 100644 index 0000000..bb7f001 --- /dev/null +++ b/searching/bs_rotated_array.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +def search(nums): + + # 1. find the smallest element in the rotate array + # "left" will be used as index later + + left, right = 0, len(nums) + while left < right: + + mid = (left + right) // 2 + if nums[mid] > nums[-1]: + left = mid + 1 + else: + right = mid + + + # 2. write a binary search + def bs(left, right, target): + + while left < right: + + mid = (left + right) // 2 + + if nums[mid] == target: + return mid + + elif nums[mid] > target: + right = mid + + else: + left = mid + 1 + + return -1 + + # 3. run for both sides + response = bs(0, left, target) + if response != -1: + return response + + else: + return bs(left, len(nums), target) +