《剑指offer》练习-面试题4-二维数组中的查找

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

例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。

1    2    8     9

2    4    9     12

4    7    10    13

6    8    11    15

思路:


从右上角开始搜索,大于7的话,继续搜索前一列,所以是column--;小于7的话,继续搜索下一行,所以是row++。

package offer;

public class Test5 {
	public static boolean findNum(int target, int[][] arr) {
		if (arr.length > 0) {
			int rows = arr.length;
			int columns = arr[0].length;
			int row = 0;
			int column = columns - 1;
			while (row < rows && column >= 0) {
				if (arr[row][column] == target) {
					return true;
				} else if (arr[row][column] > target) {
					column--;
				} else {
					row++;
				}
			}
			return false;
		}
		return false;
	}

	public static void main(String[] args) {
		int[][] arr = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
		System.out.println(findNum(5, arr));
		System.out.println(findNum(7, arr));
	}
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

《剑指offer》练习-面试题4-二维数组中的查找

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭