剑指offer(面试题4):二维数组的查找(Java 实现)


首先选取数组中右上角的数组。

1、如果该数字等于要查找的数字,则查找过程结束,返回true。

2、如果该数字大于要查找的数字,则剔除掉这个数字所在的列。

3、如果该数字小于要查找的数字,则剔除掉这个数字所在的行。

直到找到数字,或者查找范围为空(row < array.length && column >= 0)。

功能测试:

1. 二维数组中包含要查找的数字。
2. 二维数组中不包含要查找的数字。
3. 输入空指针。

public boolean Find(int target, int [][] array) {
	     if (array == null) {
	        return false;
	    }
	    int row = 0;					//数组的行数
	    int column = array[0].length-1; //数组的列数

	    while (row < array.length && column >= 0) {
	        if(array[row][column] == target) {
	            return true;
	        }
	        if(array[row][column] > target) {
	            column--;              //剔除掉一列
	        } else {
	            row++;                 //剔除掉一行
	        }
	    }
	    return false;

	    }
	}

方法二:暴力法(直接两个for循环)
 

public class test_four {
	public boolean Find(int target,int[][] array){
		int row = array.length;
		if(row<=0){
			return false;
		}else{
			for(int i=0; i<row; i++){
				int column = array[i].length;
				for(int j=0; j<column; j++){
					if(array[i][j] == target){
						return true;
					}
				}
			}
		}
		return false;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41163113/article/details/87866842