剑指offer-二维数组中的查找

Posted by franki on April 19, 2021

二维数组中的查找

有一个矩阵为:

1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15

思路

每次找到右上角的值,与传入的值进行比较,如果前者大于后者需要column减1,如果前者小于传入的值,row加1,如果相等即找到。

代码

function find(matrix, rows, columns, number) {
    let found = false;
    if (matrix !== null && rows > 0 && columns > 0) {
        let row = 0;
        let column = columns - 1;
        while (row < rows && column >=0) {
        // 二维数组右上角
            const rightCornerNum = matrix[row][column]; 
            if (rightCornerNum === number) {
                found = true;
                break;
            } else if (rightCornerNum > number) {
                column--;
            } else {
                row++;
            }
        }
    }
    return found;
}

复杂度分析

  • 时间复杂度: O(N)
  • 空间复杂度: O(1)