求一个二维数组中是否有鞍点

鞍点:行中最大,列中最小,只有一个鞍点(百度没查不到,个人认为)

1.在一个方法里实现(第一次写),结构不清楚,不容易理解

解题基本思路:

  1. 找一行中最大值,有两个最大值不算,只能是一个最大值

  2. 找到行最大值后,通过最大值下标,计较最大值所在的列的所有元素看是否是列中最小

  3. 如果是则是鞍点,不是则继续循环

public static void sadPoint(int[][]data) {
		/**
		 * 结构:
		 *     //第一个for用于一行一行循环,找每一行最大值和最大值所在的最小值比较
		 *    for(){
		 *        //第二个for,找到一行中的最大值,并传出最大值的列数
		 *        for(){}
		 *        
		 *        //第三个for,找最大值列的最小值,并传出行数
		 *        for(){}
		 *        
		 *        //比较传出的行数是否==最大值的行数,如果是则是鞍点跳出循环,不是继续循环
		 *        if(){}
		 *    
		 *    }
		 * 
		 */
		
		for (int i = 0; i < data.length; i++) {
			//max用来存储最大值,maxRow,maxList用来存储下标
			int max = data[i][0] ;
		    int maxRow = i ,maxList = 0 ;
		    
		    //循环判断一行中的所有值,找出最大值给max
			for (int j = 0; j < data[i].length; j++) {
				if(max < data[i][j]) {
					max = data[i][j] ;
					maxRow = i ;
					maxList = j ;
				}	
			}	
			
			//同上找最小值,通过maxList传出的值,找最大值所在的列的最小值
		     int min = data[0][maxList] ;
		     int minRow = 0 ; 
			for (int j2 = 0; j2 < data.length; j2++) {
				if(min > data[j2][maxList]) {
					min = data[j2][maxList] ;
					minRow = j2 ;
			}	
			}
			
			//比较最大值所在的列的最小值的行数是否==最大值的行数
			if(maxRow==minRow) {
				System.out.println("找到鞍点!");
				System.out.println(maxRow+"行"+maxList+"列是鞍点为:"+max);
				break;
				}
			
		}
	}

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值