剑指offer:面试题3 二维数组中的查找

原题

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

My Answer

思路分析

直接遍历数组,之前想着尝试如果既然数组向下向右都是递增,对数组从行列由小到大进行遍历时候,如果发现了array[i][j] > target,则可以确定数组不含这个数字;经试验发现这个思路是错误的,因为遍历时候是对每行从左到右,再对行进行从上到下进行遍历;但是可能出现 target = 7, array = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]] 的情况,此时当遍历到array[0][2]的时候,出现 8 > 9,返回False,出现错误答案;故而去掉了判别条件,直接全部遍历,得到结果,代码如下:

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        if not array:
            return False
        len_row, len_col = len(array), len(array[0])
        for row_index in range(len_row):
            for col_index in range(len_col):
                if array[row_index][col_index] == target:
                    return True
                else:
                    pass
        return False

Reference Answer

思路分析

思路:从左下角或者右上角开始比较,从左下角开始遍历,比遍历值大的话直接进行 col + 1,当出现比遍历值小的话,进行 row - 1

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        if not array:
            return False
        len_row, len_col = len(array), len(array[0])
        row, col = len_row - 1, 0
        while row >= 0 and col < len_col:
            if array[row][col] == target:
                return True
            elif array[row][col] > target:
                row -= 1
            else:
                col += 1
        return False

猜你喜欢

转载自blog.csdn.net/Dby_freedom/article/details/83050267