Skip to content

Latest commit

 

History

History
54 lines (51 loc) · 2.01 KB

day01.md

File metadata and controls

54 lines (51 loc) · 2.01 KB
  • 问题描述
    • 每行从左到右递增
    • 每列从左到右递增
    • 输入一个二维数组和一个整数
    • 判断数组是否有这个整数
  • 举例分析
    • 观察这个实际的例子,看看他有什么特征
    • 假设1
      • 从左上角的数字开始寻找
      • 向右走数字在增大
      • 向下走数字也在增大
      • 那就只能通过一行一行的遍历下去?或一列一列的遍历下去吗?
    • 假设2
      • 从右下角开始
      • 向左走数字在减小
      • 向上走数字也在减小
      • 本质上和第一种假设就没有区别了,它没有办法一次缩窄较大的范围,每次只能确定一个数字不是我们要找的
      • 那么有没有办法可以一次判断,排除多个数字的可能性呢
    • 假设3
      • 从右上角开始
      • 是一行中数字最大的
      • 又是一列中数字最小的
      • 所以当目标大于它 就是大于了一整行
      • 目标小于它 就是小于了一整列
      • 也就是等价于一次判断我们可以删除一整行或者是一整列
  • 代码解析
    • found 就是返回值 说明有没有找到这个目标数字
    • 我们要知道行和列的大小,涉及到数组的时候,我们肯定会有判断条件,让我们访问的位置是不可以越界的
    • 当数组不是空的时候,并且行列都不是0
    • 找到右上角的横纵坐标
    • 进入while循环 其中行不能过大,列不能过小
      • 如果当前右上角的数字就是目标数字,found改成true,跳出整个循环
      • 如果当前值大于目标值,列--
      • 如果当前值小于目标值,行++
    • 返回found的值
class Solution:
    # array 二维列表
    def Find(self, target, array):
        xend = len(array)-1
        yend = len(array[0])-1
        x = 0
        while x <= xend and yend >= 0:
            if array[x][yend] == target:
                return True
            elif array[x][yend] > target:
                yend -= 1
            else:
                x += 1
        return False