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

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

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

解题思路(参考剑指offer 第二版)
  • 举例:下面的二维数组每行,每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找5,则返回fasle。


    剑指offer例子
  • 具体解题过程
    Note:利用二维数组是特殊的性(从左向右增,从上到下增)剑指offer采用选取右上角的数字,在这里可以使用选取与此同理的方法,选择从左下角开始。但不能选择左上角和右下角的数字,这种选取方式无法缩小查找的范围。


    具体解题过程
  • a. 选取数组中右上角的数字

  • b. 进行判断:1.如果该数字等于要查找的数字,则查找结束;2.如果该数字大于要查找的数组,则剔除这个数字所在列;3.如果该数字小于要查找的数字,剔除这个数字所在的行。总体来说,如果要查找的数字不在数组的右上角,则每一次在数组的查找范围中剔除一行或者一列,这样就可以缩小查找范围,直到找到要查找的数字,或者查找范围为空。

编程实现
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!")
知识总结复习
  • PHP数组的声明(一维/多维)
    array(array(),array())
  • 布尔类型
    参考学习:http://www.cnblogs.com/xielong/p/9874955.html
    PHP不区分大小写, Python区别(返回True/False)
  • python __name__=='__mian__' 理解
    if _name_ == '_main_'的意思是:当.py文件被直接运行时,if _name_ == '_main_'之下的代码块将被运行;当.py文件以模块形式被导入时,if _name_ == '_main_'之下的代码块不被运行。
    参考学习:https://www.cnblogs.com/GGGGGGZX/p/9206806.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,343评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,508评论 3 400
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,182评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,374评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,372评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,926评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,333评论 3 426
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,285评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,813评论 1 321
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,887评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,016评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,677评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,350评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,843评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,960评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,493评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,038评论 2 361