【剑指offer】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入这样的一个二维数组和一个整数,判断数组中是否含该整数

题目描述

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

分析:

矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移。

实现代码:

public class Collection {
    public boolean Find(int target, int [][] array) {
        int c = 0;//第0列
        int r = array.length-1;//最后一行
        while((r>=0)&&(c<array[0].length)){//边界条件
            if(array[r][c]<target){//如果target大于array,则右移
                r++;
            }else if(array[r][c]>target){//如果target小于array,则上移
                c--;
            }else{
                return true;//满足等于就为true
            }
        }
        return false;//全都不满足,则为false。
    }
    public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入数组行数和列数\n");
		int x = s.nextInt();
		int y = s.nextInt();
		int[][] array = new int[x][y];// 初始化数组
		System.out.println("请输入数组元素\n");
		for (int i = 0; i < x; i++)// 循环输入
			for (int j = 0; j < y; j++)
				array[i][j] = s.nextInt();
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数\n");
		int t = sc.nextInt();
		Find(t, array);
		if (Find(t, array) == false) {
			System.out.println("数组中不含该元素");
		} else
			System.out.println("数组中含有该元素");
	}
}

输出示例:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值