NxN的数组矩阵,每一行,列均从左到右,从上之下递增。

本文介绍了一种高效算法,用于在一特殊类型的二维数组中搜索特定数值。该数组为NxN大小,每一行与每一列均按升序排列。通过从数组的右上角开始搜索,逐步缩小范围,实现快速定位目标元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

NxN的数组矩阵,每一行,列均从左到右,从上之下递增。
确定一个数x是否在该矩阵内。

二、解决代码

public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        /*System.out.println("请输入数字N");
        int n=scanner.nextInt();
        int a[][]=new int[n][n];
        System.out.println("请逐行输入数据");
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                a[i][j]=scanner.nextInt();
            }
        }*/
        int a[][]=new int[][]{
                {1,2,3,4},
                {3,4,5,7},
                {4,5,7,9},
                {6,8,9,22}
        };
        System.out.println("请输入你要查找的元素x");
        int x=scanner.nextInt();
        search(a, x);
    }

    private static void search(int[][] a, int k) {
        int m = a.length;
        int n = a[0].length;
        for(int i = 0, j = n-1; j >= 0 && i < n; ){
            if(a[i][j] == k){
                System.out.println(true);
                return;
            }else if(a[i][j] < k){
                i++;
            }else{
                j--;
            }
        }
        System.out.println(false);
    }

三、分析

因为矩阵是从左到右,从上到下递增的,从矩阵的右上角开始,而右上角是第一行的最大值,如果当前元素小于要找的数x,说明改行不可能存在x,因为每一行中,第n-1列是该行最大值,因此就到下一行(i++),如果a[i] [j]大于要找的数,则说明该数存于这一行中,进行j–操作,因为此时的a[i] [j]是该列中最小的值了,不能再向下移动了。

Patience and perseverance will get paid.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值