LeetCode-Search a 2D Matrix II

本例源码下载地址:SearchMatrix

题目描述:

在这里插入图片描述

题目大意是给编写一个高效率的算法来查找一个mxn的二维矩阵数组里面是否存在一个目标数。
该矩阵的有2个特点:
1、每行的元素从左到右升序排列
2、每列的元素从上到下升序排列

思路:

1、题目中没有说明该数组是不是空的,因此需要对空数组判断。
2、简单的遍历二维数组可以找到,算法复杂度为O(mxn),但是并不高效。
3、从数组特性来看,每行及每列升序排列,则在行中,如果最大的数(以题目中0行最大数15为列)都已经大于目标数,由于该行最大的数在其列中是最小的,因此该行所在的列中所有的数都不符合要求。
同理,如果该行最大的数小于目标数,由于该行最大的数是该行最大的,因此该行所在行中的所有数都不符合要求。

我们来验证演算一下:
在这里插入图片描述
从上面的演算过程可以看到,通过该方法只需要4步就可以找到对应的数。对比数组遍历复杂度小了很多。

解决方案:

取数组行数row和列数col,从右上角开始(0行,col列)的数开始比较,如果该数与目标数相等,则为目标数,如果比目标数大,则忽略查找该数所在的列,如果该数比目标数小,则忽略查找该数所在的行。
相应的代码:

public static boolean searchMatrix(int[][]  matrix, int target){
       if (matrix.length == 0) return  false;
       int row = 0;
       int col = matrix[0].length - 1;
       int temp;
       boolean result = false;
       while(row < matrix.length && col >=  0){
           temp = matrix[row][col];
           System.out.println("search temp  is "+temp);
           if (temp == target){
               result = true;
               System.out.println("search  success index is ("+row+","+col+")");
               break;
           }else{
               if (temp > target){
                  col--;
               }else{
                  row++;
               }
           }
       }
       return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值