剑指offer之二维数组中的查找(Python)

题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路1:利用数组的特点,从第一行开始,我们每次让数组的每行的最后一个和目标值进行比较。具体算法如下:
1、行序列  初始化为0,列序列  初始化为数组的列数;
2、写一个while循环判断: array[ i][ j] 和 target 的大小关系:
①array[ i][ j] < target, 说明这一行的数都比较目标值小,则意味着行序列需要增加;
②array[ i][ j] > target, 说明目标值可能就在这行,我们让列序列减小;
③array[ i][ j] = target, 那就说明找到了,返回True就好了
3、如果while循环都走完了,则只能说明这个数组中没有这个数,返回False
程序附上:
def function1(array,target):
    len_line = len(array) - 1
    len_column = len(array[0]) - 1
    i = 0
    j = len_column
    while i <= len_line and j >= 0:
        if array[i][j] < target:
            i += 1
        elif array[i][j] > target:
            j -= 1
        else:
            return True
    return False

思路2:利用Python自身特点,直接用for遍历每一行,然后用if判断是否在该列中。
1、如果找到了,返回True
2、循环结束后都还没有,则返回False
代码附上:
def function2(array,target):
    for line in array:
        if target in line:
            return True
        else:
            continue
    return False

最后,附上测试总代码:
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 14 16:09:00 2017
@author: gb_xiao
Mail: mingliumengshao@163.com
"""
"""
题目描述:在一个二维数组中,每一行都按
照从左到右递增的顺序排序,每一列都按照
从上到下递增的顺序排序。请完成一个函数,
输入这样的一个二维数组和一个整数,判断
数组中是否含有该整数。
"""
def function1(array,target):
    len_line = len(array) - 1
    len_column = len(array[0]) - 1
    i = 0
    j = len_column
    while i <= len_line and j >= 0:
        if array[i][j] < target:
            i += 1
        elif array[i][j] > target:
            j -= 1
        else:
            return True
    return False

def function2(array,target):
    for line in array:
        if target in line:
            return True
        else:
            continue
    return False


def main():
    array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    target = 5
    print function1(array,target)
    print function2(array,target)
if __name__ == "__main__":
    main()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值