diff --git a/solution1.py b/solution1.py new file mode 100644 index 00000000..6d2bd5ee --- /dev/null +++ b/solution1.py @@ -0,0 +1,20 @@ +class Solution: + def searchMatrix(self, matrix, target): + m = len(matrix) + n = len(matrix[0]) + + low, high = 0, m * n - 1 + + while low <= high: + mid = low + (high - low) // 2 + r = mid // n + c = mid % n + + if matrix[r][c] == target: + return True + elif matrix[r][c] > target: + high = mid - 1 + else: + low = mid + 1 + + return False \ No newline at end of file diff --git a/solution2.py b/solution2.py new file mode 100644 index 00000000..3634dc13 --- /dev/null +++ b/solution2.py @@ -0,0 +1,23 @@ +class Solution: + def search(self, nums, target): + low = 0 + high = len(nums) - 1 + + while low <= high: + mid = low + (high - low) // 2 + + if nums[mid] == target: + return mid + + if nums[low] <= nums[mid]: # left sorted + if nums[low] <= target < nums[mid]: + high = mid - 1 + else: + low = mid + 1 + else: # right sorted + if nums[mid] < target <= nums[high]: + low = mid + 1 + else: + high = mid - 1 + + return -1 \ No newline at end of file diff --git a/solution3.py b/solution3.py new file mode 100644 index 00000000..b1dc8a02 --- /dev/null +++ b/solution3.py @@ -0,0 +1,18 @@ +class Solution: + def search(self, reader: 'ArrayReader', target: int) -> int: + low, high = 0, 1 + + while reader.get(high) < target: + low = high + high *= 2 + + while low < high: + mid = low + (high - low) // 2 + if reader.get(mid) >= target: + high = mid + else: + low = mid + 1 + + if reader.get(low) == target: + return low + return -1 \ No newline at end of file