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

本文介绍了如何在一个二维数组中,每一行和每一列都递增排序的情况下,通过对角线遍历法查找指定整数。通过比较目标值与当前对角线元素,逐步缩小搜索范围,实现小于O(m+n)的时间复杂度。示例代码展示了这种方法的实现细节,包括避免数组越界的问题。

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

如int [] []arrays= {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};Find(7,arrays);

本题博主采用对角线遍历法。

1289
24912
471013
681115

具体地说1.先对比target是否大于1小于6 如果是在1,2,4,6查找7,没有则在1,2,8,9中查找。在没有转到2。

2.同理看7是否小于4,大于8.若是在4,7,8中查找,若不是则找4,9,12。依次类推。

需要注意的是如果给我们[6][5]大小的数组,那么array[i][i]可能会出现数组越界所以要记住事先判定。

此时每个数的查找代价小于o(m+n)

具体代码如下:

        int j=0;
        int k=0;
          for(int i=0;i<array.length;i++){
            j=array[i].length-1;
              if(i>j)
                  return false;
              if(target>=array[i][i]){
            if(target<=array[array.length-1][i]){
                for(k=i;k<array.length;k++){
                    if(target==array[k][i])
                        return true;
                }
            }
              if(target<=array[i][j]){
                  for(k=i;k<j+1;k++){
                      if(target==array[i][k])
                          return true;
                  }
              }
            }
        }
          return false;
  }。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值