• 剑指Offer(数组)-二维数组的查找


      (二位数组的查找)题目描述:

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

      解决办法一:利用二分查找的方法

      利用 while ( low <= high) 来实现遍历查找,和目标值进行比较,若目标值在左边就 high = mid -1 ,若目标值在右边就 low = mid + 1。

    public class Solution {
        public boolean Find(int target, int [][] array) {
            //利用二分查找的方法,时间复杂度是nlogn
            for(int i=0; i<array.length; i++){
                int low =0;
                int high =array[i].length - 1;
                while(low <= high){
                    int mid = (low + high)/2;
                    if(array[i][mid] > target){
                        high = mid -1;
                    }else if(array[i][mid] < target){
                        low = mid + 1;
                    }else{
                        return true;
                    }
                }
            }
            return false;
        }
    }
    

      解决办法二:利用自身数组的特性,自上而下和自左向右是递增的,

      利用左下角的元素进行与目标值的比较,若目标值比它大说明在左下角元素所在列的右边,若目标值比它小则说明在左下角元素所在行的上一行,这样子能比较到和目标值相同的元素。

    public class Solution {
        public boolean Find(int target, int [][] array) {
            int rows = array.length;
            if(rows == 0){
                return false;
            }
            int cols = array[0].length;
            if(cols == 0){
                return false;
            }
            int row = rows-1;
            int col = 0;
            while(row >= 0 && col < cols){//如果此处是<=会导致数组越界异常
                if(array[row][col] < target){
                    col++;
                }else if(array[row][col] > target ){
                    row--;
                }else{
                    return true;
                }
            }
            return false;
        }
    }
    

      需要注意的是 col < cols , 这一点是必须的,因为若条件里面判断通过,但是在逻辑里面多了col ++ 的话,就会导致数组越界异常。

  • 相关阅读:
    ArcGis面要素空间连接,取相交面积最大者 C#
    迅雷下载器无限制版_无敏感_无限速
    redhat 6.8 配置 centos6 163 的 yum 源
    apache cgi 程序: End of script output before headers
    centos php 安装 decrypt
    url传输中+转为%2B取到变空格的问题
    快速搭建自己的搜索引擎
    ffmpeg 文件推流 rtsp和rtmp
    svn 服务器操作
    edusoho迁移
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12518427.html
Copyright © 2020-2023  润新知