zoukankan      html  css  js  c++  java
  • 剑指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 ++ 的话,就会导致数组越界异常。

  • 相关阅读:
    概述各种事务隔离级别发生的影响
    linux内核的经典书籍
    sso 登录,网页跳转的实现方式
    初探移动网站的架构和设计
    C# PrintDocument 打印
    .Text分页技术(1)分页的存储过程分析
    SQL2008使用CTE递归查询批量插入500万数据
    自己写的Web服务器
    OMCS 语音视频框架
    ESFramework4.x
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12518427.html
Copyright © 2011-2022 走看看