python 二维数组长度_剑指offer二维数组中的查找【Java+Python】

点击上方"蓝字",关注了解更多 fc6e87cc3277aa6ddeebf5f888fdcb71.png

二维数组中的查找

1. 题目描述

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

2. 示例

现有矩阵 matrix 如下:

[ [1, 4, 7, 11, 15],

[2, 5, 8, 12, 19],

[3, 6, 9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30] ]

给定 target = 5,返回 true。

给定 target = 20,返回 false。

3. 解题思路

使用以下方法的前提是:该矩阵是有序的。

从矩阵的左下角开始搜索,即从18 开始查找,如果该数大于目标数,则 行数 减去 1,向上搜索小的数值;

如果小于目标数,则 列数 + 1 ,向右边搜索,搜索更大的数值

4. Java实现

// Java语言实现
public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length-1;
        int col = 0;  
        // 从左下角开始搜索,array.length 表示行的大小,array[0].length表示列的大小
        
        while (row >= 0 && col <= array[0].length-1){
            if (array[row][col] == target){
                return true;
            }else if(array[row][col] > target){
                row--;
            }else{
                col++;
            }
            
        }
        return false;
 
    }
}

5. Python实现

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        
        if not matrix:
            return False
        
        rows, cols = len(matrix), len(matrix[0])
        #从左下角开始搜索
        row, col = rows - 1, 0
        while row >= 0 and col <= cols-1:
            if matrix[row][col] == target:
                return True 
            elif matrix[row][col]                 col += 1
            else:
                row -= 1 # row一直减少
        return False

如果您觉得本文有用,请点个“在看”

88fd3a8146d825b9082b8b632ee8ab81.png精彩推荐

Java开发微服务畅购商城实战-全357集【附代码课件】

Java微服务实战谷粒商城-296集【附代码课件】

Spring Boot开发小而美的个人博客【附课件和源码】

基于Python flask框架的租房项目实战【附资料和源码】

PyQt5开发与实战视频【附课件和源码】

最全最详细数据结构与算法视频-【附课件和源码】

2020年微信小程序全栈项目之喵喵交友【附课件和源码】

b03c56b850148ff93d4c8c8ffa7f4a31.png                      

你点的每一个在看,我都认真当成了喜欢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值