美文网首页
javascript 二分法查找二维递增数组

javascript 二分法查找二维递增数组

作者: rayman_v | 来源:发表于2017-06-16 23:32 被阅读78次
var totalArr = [
    [1, 3, 43, 55, 65],
    [76, 87, 97, 123, 125],
    [134, 146, 168, 456, 652]
];

假设有数组 totalArr ,每项的值都是递增的,后一个数组比前一个数组的值都大,现在希望在 totalArr 数组中查找是否存在其中一个某个值:

function find(arr, number) {
    for (var i = 0; i < arr.length; i++) {
        var lastValue = arr[i][arr[i].length - 1];
        if (lastValue == number) {
            return true;
        }else if(lastValue > number) { // 范围在当前数组内
            return halfCut(arr[i], number);
        }
    }
    return false;
}
function halfCut(arr, number) {
    if (arr.length == 1) {
        return arr[0] == number;
    }
    var midIndex = Math.floor(arr.length / 2);
    var midValue = arr[midIndex];
    if (midValue == number) {
        return true;
    }else if (number < midValue) {
        return halfCut(arr.slice(0, midIndex), number);
    }else{
        return halfCut(arr.slice(midIndex+1, arr.length), number);
    }
}

调用 find(totalArr, 66) ,返回 false,调用 find(totalArr, 146),返回 true

  1. 首先 find 通过循环数组每一次,用数组最后的值与 number 值做比较,如果相等,直接返回 true,否则判断 number 是否比最后一个值大,如果大则循环下一层继续比较,如果小,则把该层数组和 number 传给 halfCut 方法。
  2. halfCut 首先跳过长度是否为 1 的判断,获取数组中间值,如果中间值与 number 相等,直接返回 true,否则,如果 number 小于中间值,则用前半段再次调用 halfCut,直到剩下一个元素,比较是否与 number 相等,不相等则可以肯定该数不在本数组中存在。

相关文章

  • golang循环递增数组查找值

    循环递增数组查找值 golang 1.实现要求 在循环递增数组中查找某个值 2.实现方法 使用二分法实现查找 使用...

  • PHP中实现二分法查找的两种方法

    php实现二分法的查找其实很简单,跟我一起来看看怎么实现吧。 二分法查找需要数组是一个递增的数组。 想要写出二分法...

  • javascript 二分法查找二维递增数组

    假设有数组 totalArr ,每项的值都是递增的,后一个数组比前一个数组的值都大,现在希望在 totalArr ...

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 牛客网编程整理

    二维数组,从左向右递增,从上向下递增,查找特定数值 本题思路:基于数组从左向右递增,同行元素中的最大值在最右端从上...

  • 剑指Offer(一)

    二维数组中的查找 题目 在二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,判断...

  • 二分法查找

    二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法...

  • if if 和 if else 条件语句一点自己的错误经历

    今天在练习算法时,有一个用二分法查找一个从上之下递增、从左至右递增的二维数组里是否有某一个数,写出传入一个这样的数...

  • 第三题:有序二维数组查找问题

    有序二维数组查找问题 问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺...

  • 剑指offer刷题(一)

    1、二维数组的查找 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序...

网友评论

      本文标题:javascript 二分法查找二维递增数组

      本文链接:https://www.haomeiwen.com/subject/enfvqxtx.html