二维数组中的查找

Posted by DH on August 3, 2017

题目

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

分析

直接举例:

查找7的过程:

总结三句话:从右往左,从上往下,先列后行。

从图中我们可以看。

首选用7和9比较,就排除了最后一列,接着7和8比较,排除倒数第二列,7和2比较,说明7只可能出现在前两列的2、3、4行,那么现在来比较行,7>4,排除第二行, 只可能出现在最后两行,接着就找到了7.

代码

public class Solution {
    public boolean Find(int target, int [][] array) {
		boolean find = false;
		
		// 列数
		int cols = array[0].length;
		// 行数
		int rows = array.length;
		
		if (array != null && cols > 0 && rows >0) {
			int row = 0;
			int col = cols - 1;
			
			while (row < rows && col >= 0) {
				
				if (array[row][col] == target) {
					find = true;
					return find;
				}
				
				if (array[row][col] > target) {
					col--;
				}else{
					row ++;
				}
				
			}
			
		}
		
		return find;
    }
}