找出一个二维数组中的鞍点的流程图_大概每日一题鞍点

大概每日一题

公众号新开了个栏目, 叫大概每日一题.

那么问题来了, 为啥叫大概每日一题呢?

78f277efb606936ba3113385b7406ac0.png

今天的题

题目描述:

找出具有m行n列二维数组Array的“鞍点”(保证只有一个),即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。

输入:

第一行有两个数m和n,下面有m行,每行有n个数。

输出:

Array[i][j]=x表示第i行第j列的x是一个"鞍点"

做题思路

这道题的思路还是比较清晰的: 枚举每一行, 寻找这一行里最大的数在第几列, 寻找那一列最小的数, 看看这一行最大的数是不是这一列最小的数.

伪代码:

输入m,n循环i从0到m-1    循环j从0到n-1        读入data[i][j]循环i从0到m-1    max=data[i][0]    pos=0    循环j从0到n-1        如果data[i][j] 大于 max            更新max与pos    flag = 1    循环j从0到n-1        如果data[j][pos]小于max            flag = 0    如果flag=1 说明data[i][pos]是鞍点        输出, 退出程序如果程序执行到了这里, 说明没有鞍点输出None, 退出程序.

注意点

在找数组的最小值的时候有两种实现方式:

int min = 0x70000000;int pos = -1;for(int i = 0; i < n;++ i){    if(min < data[i]){        min = data[i];        pos = i;    }}

int min = data[0];int pos = 0;for(int i = 1; i < n;++ i){    if(min < data[i]){        min = data[i];        pos = i;    }}

第一种方式将min设为极大值(或将max设为极小值), 第二种方式将min设为数组第一项的值.

这两种方式都是正确的, 要注意的就是

使用第一种方式时:

1.int所能存储的最大值是0x7fffffff, 所以对于以上情况把min设置为0x7ffffff是安全的.

2.对于要比较min+data[i]和data[i]的大小的时候, min的初值应设置为int所能存储的最大值的一半, 以保证min+data[i]仍在int范围内. 对于这种情况, 0x3f3f3f3f是一个安全的值.

使用第二种方式时:

一定要把pos变量初始化为0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值