博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】1.二维数组查找
阅读量:5875 次
发布时间:2019-06-19

本文共 1266 字,大约阅读时间需要 4 分钟。

题目

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

基本思路

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

1 2 34 5 67 8 9

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

大于:比较上移

小于:比较右移

代码思路

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

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

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

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

注意:

二维数组arri中

j代表x坐标

i代表y坐标

代码

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);      }    }

拓展:二分查找

二分查找的条件是必须有序。

和线性表的中点值进行比较,如果小就继续在小的序列中查找,如此递归直到找到相同的值。

function binarySearch(data, arr, start, end) {        if (start > end) {            return -1;        }        var mid = Math.floor((end + start) / 2);        if (data == arr[mid]) {            return mid;        } else if (data < arr[mid]) {            return binarySearch(data, arr, start, mid - 1);        } else {            return binarySearch(data, arr, mid + 1, end);        }    }

转载地址:http://tnkix.baihongyu.com/

你可能感兴趣的文章
PHP-mysqllib和mysqlnd
查看>>
Redis常用命令
查看>>
NeHe OpenGL教程 第三十五课:播放AVI
查看>>
Linux下ping命令、traceroute命令、tracert命令的使用
查看>>
js replace,正则截取字符串内容
查看>>
socket
查看>>
Highcharts使用表格数据绘制图表
查看>>
Thinkphp5笔记三:创建基类
查看>>
hdu5373
查看>>
4.单链表的创建和建立
查看>>
Android 好看的搜索界面,大赞Animation
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
[转]动态加载javascript
查看>>
【协议】5、gossip 协议
查看>>
基于配置文件的redis的主从复制
查看>>
hasura graphql 角色访问控制
查看>>
springmvc中controller内方法跳转forward?redirect?
查看>>
C#委托,事件理解入门 (译稿)转载
查看>>
容器的end()方法
查看>>
[转] Agile Software Development 敏捷软件开发
查看>>