题目: 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序; 每一列都按照从上到下递增的顺序排序; 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思考: 什么是二维数组? 直观的想到矩阵,实际上python当中没有数组的概念, 而是列表(List), 二维列表相当于二维数组 。 如下:
1 2 3 4 import numpy as nparray = np.array([[1 ,2 ,8 ,9 ],[2 ,4 ,9 ,12 ],[4 ,7 ,10 ,13 ],[6 ,8 ,11 ,15 ]]) array
array([[ 1, 2, 8, 9],
[ 2, 4, 9, 12],
[ 4, 7, 10, 13],
[ 6, 8, 11, 15]])
实现
1.最直观的是直接循环遍历每一个元素,判断是否等于给定的整数,如果相等则输出存在,否则不存在
1 2 3 4 5 6 7 8 9 10 11 12 class Solution : 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 method = Solution() answer = method.Find(70 ,array) answer
2.由于数组元素是分别按行按列递增 的,考虑:将目标值与较大的元素进行比较,通过排除较大值向下遍历
从最后一行第一列 开始遍历,记给定的整数为target,数组元素为array[i][j] 如果 target < array[i][j] 则行数减1 如果 target > array[i][j] 则列数加1 如果 target == array[i][j] 则返还True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Solution : def Find (self, target, array) : fond = 0 row = len(array) - 1 col = len(array[0 ]) - 1 i = row j = 0 while i >= 0 and j <= col: if target < array[i][j]: i = i - 1 elif target > array[i][j]: j = j + 1 else : return True else : return False
1 2 3 method = Solution() answer=method.Find(5 ,array) answer
最后更新时间:2019-08-06 20:35:10