zoukankan      html  css  js  c++  java
  • 1、二维数组中的查找------------>剑指offer系列

    题目

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

    基本思路

    二维数组是有序的,比如下面的数据:

    1 2 3
    4 5 6
    7 8 9
    

    可以直接利用左下角数字开始查找:

    大于:比较上移

    小于:比较右移

    解释:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,

    因此从左下角开始查找,当要查找数字比左下角数字大时。右移

    要查找数字比左下角数字小时,上移

    代码思路

    将二维数组看作平面坐标系

    从左下角(0,arr.length-1)开始比较:

    目标值大于坐标值---x坐标+1

    目标值小于坐标值---y坐标-1

    注意:

    二维数组arr[i][j]中

    j代表x坐标

    i代表y坐标

    题外话:在JS是不允许多维数组的,所谓的二维数组应该是数组镶套,如:

    var test = [["0","0"],["1","1"],["2","2"]]

    这是在一个一维数组里嵌套一个一维数组,如果用多维来表示,如下:0 0, 1 1, 2 2其中行数即是父数组的长度 test.length列数则是其中任意一个子数组的长度test[0].length

    代码

     function Find(target, array) {
          let i = array.length - 1; // y坐标
          let j = 0; // x坐标
          return compare(target, array, i, j);
        }
    
        function compare(target, array, i, j) {
          if (array[i] === undefined || array[i][j] === undefined) {
            return false;
          }
          const temp = array[i][j];
          if (target === temp) {
            return true;
          }
          else if (target > temp) {
            return compare(target, array, i, j+1);
          }
          else if (target < temp) {
            return compare(target, array, i-1, j);
          }
        }
  • 相关阅读:
    css之布局
    css之浮动
    白扯之聊聊我们的情怀
    Vue之指令
    Vue之vue.js声明式渲染
    AJAX经常遇到的那些问题
    HTTP之cookie技术
    正则表达式资料
    require.js资料
    AMD 和 CMD 的区别
  • 原文地址:https://www.cnblogs.com/QianDingwei/p/10890399.html
Copyright © 2011-2022 走看看