剑指offer——python【第1题】二维数组中的查找

题目描述

  • 在一个二维数组中(每个一维数组的长度相同)
  • 每一行都按照从左到右递增的顺序排序
  • 每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

理解

二维数组就是Numpy中的ndarray,可以理解为矩阵

>>> import numpy as np
>>> array = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> array
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> len(array)
3
>>> array[0]
array([1, 2, 3])
>>> len(array[0])
3

解题

有两种思路,第一种就是二次遍历,分别遍历数组的行和列,看看有没有目标值,代码如下:

class Solution:
    # array 二维列表
    def Find(self, target, array):
        for i in range(len(array)):
            for j in range(len(array[0])):
                if array[i][j] == target:
                    return True
        return False

第二种思路就是从数组的右上角开始遍历,因为是数据是从左往右,从上到下递增的,分为三种情况:

1.如果右上角那个值恰好是目标值,over

2.右上角那个值比目标值大,这个值所在列被pass掉,其实也就是指针(假设存在指针)左移

3.右上角那个值比目标值小,这个值所在行被pass掉,也就是指针下移

OK,代码如下:

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        rows = len(array)-1
        clos = len(array[0])-1
        i = 0
        while i <= rows and clos >=0:
            if array[i][clos] == target:
                return True
            elif array[i][clos] > target:
                clos -= 1
            else:
                 i += 1
        return False

 

posted @ 2018-08-27 14:12  嶙羽  阅读(934)  评论(0)    收藏  举报