行列递增的二维数组搜索

行列递增的二维数组搜索

问题

这个题目说的是,给你一个二维数组 matrix,和一个目标值 target。你要在数组里找到这个目标值,然后返回它的行/列下标。如果找不到,则返回 [-1,-1]。

这个数组的每一行都是从左向右递增,每一列都是从上到下递增。和「二维数组的二分搜索」不同,这道题目并不保证每一行的第一个数都比上一行的最后一个数要大。

比如说,给你的二维数组是:

1, 3, 5
2, 4, 6

给你的目标值是 4。目标值 4 在这个数组中,找到后返回它的下标 [1, 1] 即可。

如果给你的目标值是 100,显然它不在这个二维数组中,你要返回 [-1,-1]。

代码

public class AlgoCasts {

  // Time: O(m+n), Space: O(1)
  public int[] searchIn2DArray(int[][] matrix, int target) {
    if (matrix == null || matrix.length == 0 ||
      matrix[0] == null || matrix[0].length == 0)
      return new int[]{-1, -1};

    int m = matrix.length, n = matrix[0].length;
    int i = 0, j = n - 1;
    while (i < m && j >= 0) {
      if (target < matrix[i][j]) --j;
      else if (target > matrix[i][j]) ++i;
      else return new int[]{i, j};
    }
    return new int[]{-1, -1};
  }

}

 上一篇
求和为给定值的组合 求和为给定值的组合
求和为给定值的组合问题 这个题目说的是,给你一个正整数数组,数组中不包含重复元素,同时给你一个正整数目标值,你要找到数组中和为目标值的所有组合。另外,数组中每个元素都可以使用无限多次,并且答案中不能包含重复组合。 比如说,给你的数组是:
2019-01-06
下一篇 
最长连续整数序列的长度 最长连续整数序列的长度
最长连续整数序列的长度问题 这个题目说的是,给你一个无序的整数数组,你要找到数组中元素能够组成的最长连续整数序列,然后返回它的长度。 比如说,给你的数组是 8, 4, 2, 1, 2, 3, 6,这里面的数字能够组成的最长连续整数序列是 1
2019-01-06
  目录