<
>

【Python学习-列表-类-循环】【剑指offer】之二维数组中的查找

2020-06-28 14:51:23 来源:易采站长站 作者:易采站长站整理

【Python学习-列表-类-循环】【剑指offer】之二维数组中的查找基础知识二维数组中的查找测试结果c++版本
基础知识

Python中关于数组及len的操作详情可参考link,link。

二维数组中的查找

题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
分析:
输入:二维数组array 整数 target

# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here

在进行作答时,已经创建好了类及输入的二维数组array及整数target,那么解题思路分析:

暴力方法:遍历二维数组每一个元素,最后找是否有该整数。

思路二:因为题目明确说了二维数组的每一行是从左到右递增,每一列从上到下递增,如果想减少暴力方法每个都遍历一次的次数,那么就需要利用到这种独特的递增顺序,遍历可以从左下角或者右上角开始遍历,从左下角开始,如果整数比他大,则向右移动(右边数组的数会增大),再次进行比较,如果整数比他小,则向上移动(上边数组的数会减小),就像猜数游戏一样,告诉你是大了还是小了,最后找到正确的数。

暴力法代码:
复杂度最高

# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if not array:
return
row=len(array) # 列[[1, 2, 3], [4, 5, 6]] col=len(array[0]) # 行
for i in range(row):
for j in range(col):
if array[i][j]==target:
return True
return False

思路二代码:
每次从右和上选一个。

# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
rows = len(array) - 1
cols= len(array[0]) - 1
i = rows
j = 0
while j=0: # 在数组的边界内操作
if targetarray[i][j]:
j += 1
else:
return True
return False

测试

以上代码均为写好的类,下面创建对象来测试代码:

# -*- coding:utf-8 -*-
              
暂时禁止评论

微信扫一扫

易采站长站微信账号