概念理解
题目
001-二维数组查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
方法一:选取右上角为起始点,遍历
def Find(self, target, array):
# write code here
row = 0
col = len(array[0]) - 1
while col >= 0 and row <= len(array)-1:
if array[row][col] > target:
col -= 1
elif array[row][col] < target:
row += 1
else:
return True
return False
方法二:选取右上角为起始点,帅气遍历
def searchMatrix(self, matrix, target):
j = -1
for row in matrix:
while j + len(row) and row[j] > target:
j -= 1
if row[j] == target:
return True
return False
006-旋转数组的最小数字(二分查找)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
方法一:暴力搜索
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if not rotateArray:
return 0
else:
for i in range(len(rotateArray)-1):
if rotateArray[i] < rotateArray[0]:
return rotateArray[i]
方法二:二分查找
l, r = 0, len(nums)-1
if nums[l] < nums[r]:
return nums[l]
while l <= r:
mid = (l+r) // 2
if nums[mid] > nums[l]:
l = mid
elif nums[mid] < nums[r]:
r = mid
else:
return nums[r]