1、二分法找某一元素的位置
分而治之
class Solution:
def search(self , nums: List[int], target: int) -> int:
left=0;
right=len(nums)-1;
while left<=right:
mid=(left+right)//2
if target>nums[mid]:
left=mid+1
elif target<nums[mid]:
right=mid-1
elif target==nums[mid]:
return mid
return -1
2、有序二维数组查找某一元素,可以遍历,但没有用到有序的条件
首先看四个角,左上与右下必定为最小值与最大值,而左下与右上就有规律了:左下元素大于它上方的元素,小于它右方的元素,右上元素与之相反。既然左下角元素有这么一种规律,相当于将要查找的部分分成了一个大区间和小区间,每次与左下角元素比较,我们就知道目标值应该在哪部分中,于是可以利用分治思维来做。
具体做法:
- step 1:首先获取矩阵的两个边长,判断特殊情况。
- step 2:首先以左下角为起点,若是它小于目标元素,则往右移动去找大的,若是他大于目标元素,则往上移动去找小的。
- step 3:若是移动到了矩阵边界也没找到,说明矩阵中不存在目标值。
class Solution:
def Find(self , target: int, array: List[List[int]]) -> bool:
if len(array)==0:
return False
n=len(array)
if len(array[0])==0:
return False
m=len(array[0])
i=n-1
j=0
while i>=0 and j<m:
if array[i][j]>target:
i-=1
elif array[i][j]<target:
j+=1
else:
return True
return False