• 牛客网剑指offer 二维数组的查找


    题目描述

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

    解题思路

    该题有很多种解法,第一眼看过去,发现这个二维数组是有规律的,于是就排除了暴力解法。

    每一行都是排好序了的,这又是个查找问题,于是我又想到了二分查找,这种解法的时间复杂度为O(nlogn);虽然可以过,但效率并不是很高。

    还有一种解法,这个想法同样是由二分查找引起的。

    二分查找是这样实现的

    if(target  <   arr[mid]){
    //找左边
    。。。。。。。
    }else if(target > arr[mid]){
    //找右边
    。。。。。
    }else{
    //找到了
    。。。。
    }

    于是我就在想能不能实现大于目标向一个方向,小于目标向一个方向,最后我将目标锁定在了右上角,当目标太大时,我就找下边,当目标太小时,我就找左边,这样找的话,最后的时间复杂度只有O(m+n);这应该就是最优解了吧。代码如下:

     1 public boolean Find(int target, int [][] array) {
     2         int row=array.length;
     3         int col=array[0].length;
     4         int i=0,j=col-1;
     5         while(i<row&&j>=0){
     6             if(array[i][j]>target){
     7                 j--;
     8             }else if(array[i][j]<target){
     9                 i++;
    10             }else{
    11                 return true;
    12             }
    13         }
    14         return false;
    15     }

    同理的,如果你将起始点设在左下角的话,也可以得到相同的效果,可以试一试。

  • 相关阅读:
    A
    MongoDB小结17
    MongoDB小结16
    金蝶无法生成下推发票
    MongoDB小结15
    MongoDB小结14
    MongoDB小结13
    MongoDB小结12
    MongoDB小结11
    MongoDB小结10
  • 原文地址:https://www.cnblogs.com/swust-wangyf/p/7663242.html
Copyright © 2020-2023  润新知