zoukankan      html  css  js  c++  java
  • [剑指offer]二维数组中的查找

    二维数组中的查找

    题目描述

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    例如:下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。

    思路1

    观察特点,以左下角元素为起点,上方的元素都比这个数小,右边的元素都比这个数大。所以如果target与array[i][j]比较的三种形式

    • 相等,true
    • 小于,i--,往上方元素找
    • 大于,j++,往右方元素找
      类似的可以推出起点在右上角的情况,主要是通过区分一大一小可以确定下一个比较元素的大致寻找方向。左下角为起点的代码如下
    public class Solution {
        public boolean Find(int target, int [][] array) {
            int rows = array.length;
            int cols = array[0].length;
            int i = rows - 1,j = 0;
            while(i >= 0 && j < cols){
                if(target == array[i][j])
                    return true;
                if(target < array[i][j]){
                    i--;
                    continue;
                }
                if(target > array[i][j]){
                    j++;
                    continue;
                }
            }
            return false;
        }
    }
    

    思路2

    对每一行进行二分查找,逐行进行遍历

    public class Solution {
        public boolean Find(int target, int [][] array) {
            int rows = array.length;
            int cols = array[0].length;
            for(int i = 0; i < rows; i++){
                int low = 0;
                int high = cols - 1;
                while(low <= high){
                    int mid = (low + high) / 2;
                    if(target < array[i][mid])
                        high = mid - 1;
                    else if(target > array[i][mid])
                        low = mid + 1;
                    else
                        return true;
                }
            }
            return false;
        }
    }
    
    日积月累,水滴石穿
  • 相关阅读:
    python print()输出指定小数位数的数字
    P35 线性回归两种求解方式总结
    P34 线性回归的策略、优化、案例
    P33 线性回归的定义及矩阵的运算
    P53 trainable 学习率的调整,梯度爆炸
    P52 线性回归的原理的复习及实现
    P51 可视化学习
    P50 运算API介绍
    P49 张量的定义以及数据
    P48 会话的run()方法
  • 原文地址:https://www.cnblogs.com/lonelyisland/p/14381781.html
Copyright © 2011-2022 走看看