面试之基础算法题:判断目标数是否在二维有序数组中(Java版)

概述

给定一个二维数组和目标数字,数组的每行或者每列都是有序的,判断数字是否在二维数组里面。
如数组[[1, 3, 4, 7], [3, 5, 10, 20], [7, 8, 15, 30], [10, 15, 20, 50]],判断10是否在二维数字中。

分析

思路1:两次for循环,肯定可以解决问题,但时间复杂度是O(n^2)。代码略。

思路2:

实现:

private static boolean findTarget(int[][] arr, int target) {
  if (target < arr[0][0]) {
        return false;
    }
    int length = arr.length;
    for (int i = 0, j = length - 1; i < length && j > 0; ) {
        if (arr[i][j] == target) {
            return true;
        } else if (arr[i][j] < target) {
            i++;
        } else {
            j--;
        }
    }
    return false;
}

拓展

posted @ 2022-08-29 19:27  johnny233  阅读(23)  评论(0编辑  收藏  举报  来源