From 9b5bc27dfad563bd441bc0d2d413081e6c7df403 Mon Sep 17 00:00:00 2001 From: manan gandhi Date: Sat, 6 Jun 2026 18:48:31 -0400 Subject: [PATCH] Binary-Search-1 --- problem1.py | 22 ++++++++++++++++++++++ problem2.py | 27 +++++++++++++++++++++++++++ problem3.py | 20 ++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 problem1.py create mode 100644 problem2.py create mode 100644 problem3.py diff --git a/problem1.py b/problem1.py new file mode 100644 index 00000000..73e6aa47 --- /dev/null +++ b/problem1.py @@ -0,0 +1,22 @@ +# https://leetcode.com/problems/search-in-a-sorted-array-of-unknown-size/ +# Time Complexity O(log(m*n)) m*n elements +# Space Complexity O(1) + + +class Solution: + def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: + m = len(matrix) # rows [[],[],[]] + n = len(matrix[0]) # columns + low = 0 + high = (m * n) - 1 + while low <= high: + mid = (low + high) // 2 + r = mid // n + c = mid % n + if matrix[r][c] == target: + return True + if matrix[r][c] < target: + low = mid + 1 + else: + high = mid - 1 + return False diff --git a/problem2.py b/problem2.py new file mode 100644 index 00000000..d510f0f1 --- /dev/null +++ b/problem2.py @@ -0,0 +1,27 @@ +# https://leetcode.com/problems/search-in-rotated-sorted-array/ +# Time Complexity O(log(n)) +# Space Complexity O(1) + + +class Solution: + def search(self, nums: List[int], target: int) -> int: + low = 0 + high = len(nums) - 1 + while low <= high: + mid = (low + high) // 2 + if nums[mid] == target: + return mid + # left sorted + if nums[low] <= nums[mid]: + # nums[low] <= target < nums[mid] indicates target could be in the left half + if nums[low] <= target < nums[mid]: + high = mid - 1 + else: + low = mid + 1 + # right sorted + else: + if nums[mid] < target <= nums[high]: + low = mid + 1 + else: + high = mid - 1 + return -1 diff --git a/problem3.py b/problem3.py new file mode 100644 index 00000000..47be92bf --- /dev/null +++ b/problem3.py @@ -0,0 +1,20 @@ +# https://leetcode.com/problems/search-in-a-sorted-array-of-unknown-size/ +# Time Complexity O(log(n)) here both loops have same range so it wont be m+n +# Space Complexity O(1) + + +class Solution: + def search(self, reader: "ArrayReader", target: int) -> int: + low, high = 0, 1 + while reader.get(high) < target: + high *= 2 + + while low <= high: + mid = (low + high) // 2 + if reader.get(mid) == target: + return mid + if reader.get(mid) > target: + high = mid - 1 + else: + low = mid + 1 + return -1