From 0848f2421cfc89fc3a9608a0608dcd5c497fa339 Mon Sep 17 00:00:00 2001 From: pratikb0501 Date: Mon, 13 Apr 2026 21:51:40 -0700 Subject: [PATCH] Solved Binary Search Set 1 --- Problem_1.py | 21 +++++++++++++++++++++ Problem_2.py | 25 +++++++++++++++++++++++++ Problem_3.py | 16 ++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 Problem_1.py create mode 100644 Problem_2.py create mode 100644 Problem_3.py diff --git a/Problem_1.py b/Problem_1.py new file mode 100644 index 00000000..5b631292 --- /dev/null +++ b/Problem_1.py @@ -0,0 +1,21 @@ +class Solution: + def searchMatrix(self, matrix, target): + rows,cols = len(matrix),len(matrix[0]) + n = rows * cols + low,high = 0,n-1 + while low <= high: + mid = low + (high-low)//2 + curr = matrix[mid//cols][mid%cols] + if target == curr: + return True + if target < curr: + high = mid -1 + else: + low = mid + 1 + return False + +sol = Solution() +matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]] +target = 3 +print(sol.searchMatrix(matrix,target)) +print(sol.searchMatrix(matrix,99)) \ No newline at end of file diff --git a/Problem_2.py b/Problem_2.py new file mode 100644 index 00000000..0b0dd075 --- /dev/null +++ b/Problem_2.py @@ -0,0 +1,25 @@ +class Solution: + def search(self, nums, target): + n = len(nums) + low, high = 0, n - 1 + while low <= high: + mid = low + (high - low) // 2 + curr = nums[mid] + if curr == target: + return mid + if nums[low] <= curr: + if nums[low] <= target < curr: + high = mid - 1 + else: + low = mid + 1 + else: + if curr < target <= nums[high]: + low = mid + 1 + else: + high = mid - 1 + return -1 + +nums = [4,5,6,7,0,1,2] +target = 3 +sol = Solution() +print(sol.search(nums,target)) \ No newline at end of file diff --git a/Problem_3.py b/Problem_3.py new file mode 100644 index 00000000..3ffb6aff --- /dev/null +++ b/Problem_3.py @@ -0,0 +1,16 @@ +class Solution: + def search(self, reader: "ArrayReader", target: int) -> int: + low, high = 0, 1 + while target > reader.get(high): + low = high + high = high << 1 + while low <= high: + mid = low + (high - low) // 2 + curr = reader.get(mid) + if curr == target: + return mid + if target < curr: + high = mid - 1 + else: + low = mid + 1 + return -1 \ No newline at end of file