diff --git a/P1.py b/P1.py new file mode 100644 index 00000000..de6b26da --- /dev/null +++ b/P1.py @@ -0,0 +1,29 @@ +# Search in Rotated Sorted Array + +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 + + # Check for left sorted array or not: + if nums[low] <= nums[mid]: + if nums[low] <= target and nums[mid] >= target: + # target must be here + high = mid-1 + else: + low = mid+1 + + else: + # At this point, it's right sorted + if nums[mid] <= target and nums[high]>=target: + low = mid+1 + else: + high = mid-1 + + return -1 \ No newline at end of file diff --git a/P2.py b/P2.py new file mode 100644 index 00000000..a5134ec4 --- /dev/null +++ b/P2.py @@ -0,0 +1,22 @@ +# Search in a sorted array of unknown size + +class Solution: + def search(self, reader: 'ArrayReader', target: int) -> int: + low = 0 + high = 1 + + while reader.get(high) < target: + low = high + high *= 2 + + while low <= high: + mid = (low + high) // 2 + + if reader.get(mid) == target: + return mid + elif reader.get(mid) < target: + low = mid + 1 + else: + high = mid - 1 + + return -1 \ No newline at end of file diff --git a/P3.py b/P3.py new file mode 100644 index 00000000..6e3256bd --- /dev/null +++ b/P3.py @@ -0,0 +1,23 @@ +class Solution: + def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: + if not matrix or not matrix[0]: + return False + + rows = len(matrix) + cols = len(matrix[0]) + + low = 0 + high = rows * cols - 1 + + while low <= high: + mid = (low + high) // 2 + mid_value = matrix[mid // cols][mid % cols] + + if mid_value == target: + return True + elif mid_value < target: + low = mid + 1 + else: + high = mid - 1 + + return False \ No newline at end of file