zoukankan      html  css  js  c++  java
  • 剑指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)

  • 相关阅读:
    1、手把手教React Native实战之环境搭建
    0、手把手教React Native实战之开山篇
    完整软件项目开发周期介绍
    闲暇决定个人的前程
    长期优秀的人,可能优秀只是他的习惯
    如何进行项目管理
    精选后端开发技巧大集合
    你的代码里藏着你的优雅
    人生就是一场永不停歇的修行
    写给女程序员的一篇文章
  • 原文地址:https://www.cnblogs.com/Justdocument/p/12388669.html
Copyright © 2011-2022 走看看