[剑指-01](php&python):二维数组中的查找

2018-12-25  本文已影响0人  myFamily329
说明:记录刷剑指offer,使用php与python两种语言,对解题思路以及涉及到的基本语法以及知识点做学习记录。其中对于每道题目进行粗略的分类。
题目来源
题目描述

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

解题思路(参考剑指offer 第二版)
编程实现
PHP
运行时间:486ms

占用内存:3808k
<?php

function Find($target, $array)
{
    //获得行,列数
    $rows = count($array);
    $cols = count($array[0]);
    if (!empty($array) && $rows > 0 && $cols > 0) {
        $row = 0;
        $col = $cols - 1;
        while ($row < $rows && $col >= 0) {
            /* a. 如果该数字大于要查找的数组,则剔除这个数字所在列;
               b. 如果该数字小于要查找的数字,剔除这个数字所在的行;
               c. 如果该数字等于要查找的数字,则查找结束*/
            if ($array[$row][$col] > $target) {
                $col -= 1;
            } elseif ($array[$row][$col] < $target) {
                $row += 1;
            } else {
                return True;
            }
        }
    }
    return false;
}
/* 测试用例 
a. 二维数组包含找到的target(查找最大值/最小值/最大值-最小值之间包含的值)
b. 二维数组不包含找到的target(查找大于最大/小于最小/不在最大与最小之间)
c.特殊输入测试(数组为空等)

*/
$array = array(array(1,2,8,9),array(2,4,9,12),array(4,7,10,13),array(6,8,11,15),array(9,10,12,17));
$target = 18;
var_dump(Find($array, $target));
?>
Python
运行时间:373ms

占用内存:5628k
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        if not array:
            return False
        rows = len(array)
        cols = len(array[0])
        
        row = 0
        col = cols - 1
        while row < rows and col >= 0:
            if array[row][col] > target:
                col -= 1
            elif array[row][col] < target:
                row += 1
            else:
                return True
        return False
if __name__ == "__main__":
    array = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
    target = 7
    S = Solution()
    if S.Find(target, array):
        print("OK!")
    else:
        print("Not Found!")
知识总结复习
上一篇下一篇

猜你喜欢

热点阅读