(七)在行列都排好序的矩阵中找指定数

【题目】给定一个指定的MxN的整型矩阵arr,和一个整数K,arr的每一行每一列都是排好序的,实现一个函数,判断K是否在矩阵arr中
【举例】在这里插入图片描述
输入10,返回true;输入20,返回false

【要求】时间复杂度为O(M+N),空间复杂度为O(1)
【题解】
(1)从矩阵的右上角开始寻找(row = 0,col = N-1)

(2)比较当前数arr[row][col]与K的大小

  • 如果等于K,返回true
  • 如果大于K,说明当前数所在的列中,处于当前数下方的数均比K大,所以没有必要继续停留在第col行上,令col -= 1,重复步骤2
  • 如果比K小,说明当前数所在行中,处于当前数左边的数都比K小,所以没有必要停留在col列了,令col += 1,重复步骤2

(3)若没有找到返回false

也可以从左下角开始找(row = M-1,col = 0),相等返回true;比K小则col += 1;比K大则row -= 1;依次重复该步骤,没有返回false。

【C++code】

#define N 4
//从右上角开始
bool isContains(int arr[][N],int column,int K){
   
    int row = 0;
    int col = column - 1;
  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值