「面试」- 二分查找算法

334 阅读1分钟

自己算法不好,刷一些算法题,整理供自己复习使用~

实现二分查找

function erFen(target,array) {
    let left = 0;
    let right = array.length - 1;
    while(left <= right) {
        let middle = Math.floor((left + right)/2);
        if (array[middle] === target) {
            return true;
        }else if (array[middle] < target) {
            left = middle + 1;
        }else {
            right = middle - 1;
        }
    }
    return false;
}

执行如下

image.png

二维数组的查找

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

image.png

思路

  • 首先是有顺序的无论行还是列
  • 取二维数组中第一个数组的最后一位或者最后一个数组的第一位与target进行比较

这里会有一个唯一的路径,否则会重复路径

image.png

function Find(target, array){
    let col = 0;
    let row = array.length -1;
    while(row >= 0 && col <= array.length -1) {
        if (target < array[col][row]){
            row --;
        }else if(target === array[col][row]) {
            return true;
        }else{
            col ++;
        }
    }
    return false
}