剑指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
人生苦短,何不用python

浙公网安备 33010602011771号