找到二维数组一行中最小,但同时该数又是一列中最大的数。


public class Tsun0408 {
    //定义一个二维数组,找到其中某个值,在行中最小,列中最大的值
    public static int[][] arr = new int[][]{{13,7,15,18,19,21,23,5,14,19,41,32,87},
                                            {2,4,16,9,8,32,12,1,100,19,91,27,12}
                                                                             };

    public static int left = 0,//左右移动
                       end = 0;//上下移动

    public static void main(String[] args) {
      //将原点与上下左右的值进行比较,如果发现原点不满足条件,就返回继续循环
       for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
            left=i;end=j;//原点位置
            if(Gs(i,j)&&Bs(i,j)&&Hs(i,j)&&Ks(i,j))
            System.out.println("满足条件的值为->"+arr[i][j]);

            }
        }

    }

    public static boolean Gs(int x,int y){
        boolean f = true;

        //这一行是否有值比自身要小,只要判断有一个值比自己小,f=false;
        if(y+1<arr[x].length){
            if(arr[x][y+1]<arr[left][end]){
                f=false;
            }else{
                f=Gs(x,y+1);
            }
        }
        return f;//判断右边
    }
    public static boolean Bs(int x,int y){
        boolean f=true;

        //与自身左边这一行的所有元素进行比较,其中只要有一个值小于原点,f=false
        if(y-1>=0){
            if(arr[x][y-1]<arr[left][end]){
                f=false;
            }else{
                f=Bs(x,y-1);
            }
        }
        return f;//判断左边
    }
    public static boolean Hs(int x,int y){
        boolean f=true;

        //与自身上面这一列的所有元素进行比较,只要有一个值大于原点,f=false
        if(x-1>=0){
            if(arr[x-1][y]>arr[left][end]){
                f=false;
            }else{
                f=Hs(x-1,y);
            }
        }
        return f;//判断上面
    }
    public static boolean Ks(int x,int y){
        boolean f=true;

        //与自身下面这一列的所有元素进行比较,只要有一个值大于原点,f=false
        if(x+1<arr.length){
            if(arr[x+1][y]>arr[left][end]){
                f=false;
            }else{
                f=Ks(x+1,y);
            }
        }
        return f;//判断下面
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值