1 Search a 2D Matrix
1.1 题目描述
from typing import List
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
left = 0
right = len(matrix) - 1
mid = 0
while left <= right:
mid = left + (right - left) // 2
if matrix[mid][-1] < target:
left = mid + 1
elif matrix[mid][0] > target:
right = mid - 1
else:
break
row_left = 0
row_right = len(matrix[0]) - 1
while row_left <= row_right:
row_mid = row_left + (row_right - row_left) // 2
if matrix[mid][row_mid] == target:
return True
elif matrix[mid][row_mid] > target:
row_right = row_mid - 1
else:
row_left = row_mid + 1
return False
if __name__ == '__main__':
so = Solution()
matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 60]]
target = 3
res = so.searchMatrix(matrix, target)
print(res)
1.2 解题思路
- 注意
left <= right
中的=
情况,如果遗漏,left=right
的情况的无法比较。 - 边界调整时,边界的条件你能够使得
mid + 1
或者mid - 1
,如果直接使用mid
会出现死循环的情况。 - 右边界的初始选取情况一般为
数组长度-1
。
2 Search in a Ratated Sorted Array II
2.1 题目描述
题目:leetcode 81
from typing import List
class Solution:
def search(self, nums: List[int], target: int) -> bool:
left = 0
right = len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return True
else:
if nums[mid] > nums[right]:
if nums[left] <= target < nums[mid]:
right = mid - 1
else:
left = mid + 1
elif nums[mid] < nums[right]:
if nums[mid] < target <= nums[right]:
left = mid + 1
else:
right = mid - 1
else:
j = left
while j < right:
if nums[j] == target:
return True
j += 1
right = mid - 1
return False
if __name__ == '__main__':
so = Solution()
nums = [1, 3]
target = 3
res = so.search(nums, target)
print(res)
2.2 解题思路
- 数组主要分为这两种
[3,4,5,6,7,1,2]和[7,6,1,2,3,4,5]
这两种类型。 - 根据
mid
去判断哪一部分有序,然后从有序
那一部分去判断。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)