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 ++ 的话,就会导致数组越界异常。

  • 相关阅读:
    Ural_1018. Binary Apple Tree(树形DP)
    2011 Asia Shanghai Regional Contest Problem A
    Ural_1012. Kbased Numbers. Version 2(dp)
    HDU_1524 A Chess Game (sg函数)
    HDU_1760 A New Tetris Game(dfs + 博弈)
    POJ_2023 Choose Your Own Adventure(DFS)
    POJ_3267 The Cow Lexicon(DP)
    Qt 的QString类的使用
    用QFileSystemModel和Listview做的简易图片浏览
    Qt 对文件的操作
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12518427.html
Copyright © 2011-2022 走看看