Java篇—二维数组的查找

本文介绍了如何在按行和列递增排列的Java二维数组中查找特定整数。通过比较目标值与数组右上角元素,动态调整查找路径,实现高效搜索。此外,还回顾了二维数组的基本操作和另一种遍历查找的方法。

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

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

解题思路:利用该二维数组的特性(行列都是递增的),用所查整数与右上角的元素进行比较,如果所查整数小于右上角数值(该元素为第一行的最大元素,最后一列的最小元素),则列col--,否则,行row++,查找结束的时候,如果还未返回,即可认为不存在。(此为解法一,解法二,请往后看!)

二维数组的复习:

//定义一个整型数组:

2行3列 int data[][] = new int[2][3];

//获取行数---2行

int row = data.length;

//获取列数---3列

int col = data[0].length;

二维数组可以抽象理解为其本身就是一个一维数组,不过它的元素比较特殊,即每个元素都为一维数组。

data[0][0] data[0][1] data[0][2]

data[1][0] data[1][1] data[1][2]

详细代码:

public class Exercise5 {
    public static boolean findNumber(int data[][],int target){
        //定义二维数组的行数
        int row = 0;
        //定义二维数组的列数
        int col = data[0].length - 1;
        //通过while循环控制
        while(row < data.length && col >= 0){
            //所查元素小于右上角元素,col--
            if(data[row][col] > target){
                col--;
            }else if(data[row][col] < target){
                //所查元素大于右上角元素,row++
                row++;
            }else{
                return true;
            }
        }
        return false;
    }
    public static void main(String[] args) {
        int data[][] = {{1,2,3},{4,5,6},{7,8,9}};
        boolean temp = findNumber(data,7);
        System.out.println(temp);
    }
}

解法二:利用两层for循环,遍历数组,再用if语句判断数组元素是否与所查找元素相等即可,外层for循环控制行数,内层for循环控制列数,遍历结束之后,如果没有,返回false。

public class Exercise5 {
    
    public static void main(String[] args) {
        int data[][] = {{1,2,3},{4,5,6},{7,8,9}};
        boolean temp = findNumber(data,7);
        System.out.println(temp);
    }
    //普通for循环写法
    private static boolean findNumber(int[][] data, int i) {
        //外层for循环控制行数
        for (int j = 0; j < data.length; j++) {
            //内层for循环控制列数
            for (int k = 0; k < data[0].length; k++) {
                if(data[j][k] == i){
                    return true;
                }
            }
        }
        return false;
    }
    //foreach写法
/*    private static boolean findNumber(int[][] data, int i) {
        //循环输出行
        for (int[] row:data) {
            //循环输出列
            for (int col:row) {
                //判断所查元素和列中元素是否相等
                if(col == i){
                    return true;
                }
            }
        }
        return false;
    }*/
}

foreach复习:

for(数据类型 临时变量 : 数组(集合)) {

// 循环次数为数组长度,而每一次循环都会顺序取出数组中的一个元素赋值给临时变量

}

即在for循环里面无须使用索引来取数据。

心灵鸡汤:不要羡慕别人,终有一天你会成为别样仰望的人,在此之前,你唯有努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值