• 剑指offer 面试题4.二维数组中的查找


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


    本文通过对重要条件:

    每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序”的理解逐步进行优化。


    1.暴力搜索

    不考虑两个递增的特性,直接对该二维数组进行行列搜索。

    时间复杂度取决于数组的大小,O(n²)

    代码两层for循环即可。

    2.二分简单优化

    只利用行有序的条件,对行进行二分查找。

    可将时间复杂度降低到O(nlogn)

    代码在第一种情况下将内层for循环改成二分查找即可。

    3.从右上角或者左下角(对书中解法的理解)

    我最开始的想法就是从左上角开始进行一种,类似于dfs的解法。

    很明显,看过书中解法之后,远没有书中的解法来的巧妙。

    可以通过生活中做数独的例子,去理解书中的解法。

    0)从右上角开始,将当前数字temp同待查询数字x比较。

    ​ 0.1)如果x == temp 找到该数字结束

    ​ 0.2)如果x > temp,已知temp为该行最大数字,故排除整行,将temp设为该列第二个数字,回到0

    ​ 0.3)如果x < temp,已知temp为该列最小数字,故排除整列,将temp设为刚行第二个数字(倒数第二个),回到0

    这个思路是通过深刻理解题意,巧妙的利用题目的条件解出来的。时间复杂度降低到了O(n)

  • 相关阅读:
    tornado-cookies+pycket 验证
    解决form表单通过ajax时,required失效问题
    如何判断一个文件是否存在
    django中@property装饰器的运用
    RestFul API接口设计风格介绍和核心功能(概念)
    python中各个response使用
    Python的命名规则
    break和continue的区别
    LOCK接口
    API
  • 原文地址:https://www.cnblogs.com/Justdocument/p/12388669.html
Copyright © 2020-2023  润新知