二维数组中查找(剑指office)

1、题目要求

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


示例:

[
	[1,4,7,11,15],
	[2,5,8,12,19],
	[3,6,9,16,22],
	[10,13,14,24],
	[18,21,23,30]
]

给定target = 5,返回 true

给定target = 17,返回 false

2、解题思路

是根据题目中每一行都按照从左到右的递增顺序排序,每一列都按照从上到下递增顺序排序,这两个条件,我们可以先将target和每一行的第一个进行对比,当target小于所在行的第一列的元素时,我们就不再去遍历此行。当target大于所在行的第一列就去遍历这一行,判断是否包含!

3、具体实现

public static void main(String[] args) {
    
    
		int[][] matrix = {
    
    
		              	{
    
    1,4,7,11,15},
		            	{
    
    2,5,8,12,19},
		            	{
    
    3,6,9,16,22},
		            	{
    
    10,13,14,24},
		            	{
    
    18,21,23,30}
						};
		int target = 15;
		boolean ble = new dem3().findNumberIn2DArray(matrix, target);
		System.out.println(ble);
	}
	public boolean findNumberIn2DArray(int[][] matrix,int target ) {
    
    
		if((matrix == null || matrix.length == 0)||(matrix.length == 1 && matrix[0].length == 0)) {
    
    
			return false;
		}
		// matrix[i][j] 对应的是右上角开始
		int i = 0, j = matrix[0].length - 1;
		while(i <= matrix[0].length -1 && j >= 0) {
    
    
			if(target == matrix[i][j]) {
    
    return true;}
			if(target < matrix[i][j]) {
    
    
				j--;
			}else {
    
    
				i++;
			}
		}
		return false;
	}

猜你喜欢

转载自blog.csdn.net/weixin_44676935/article/details/107220240