剑指offer——python【第1题】二维数组中的查找

题目描述

  • 在一个二维数组中(每个一维数组的长度相同)
  • 每一行都按照从左到右递增的顺序排序
  • 每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

理解

二维数组就是Numpy中的ndarray,可以理解为矩阵

复制代码
>>> import numpy as np
>>> array = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> array
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> len(array)
3
>>> array[0]
array([1, 2, 3])
>>> len(array[0])
3
复制代码

解题

有两种思路,第一种就是二次遍历,分别遍历数组的行和列,看看有没有目标值,代码如下:

class Solution:
    # array 二维列表
    def Find(self, target, array):
        for i in range(len(array)):
            for j in range(len(array[0])):
                if array[i][j] == target:
                    return True
        return False

第二种思路就是从数组的右上角开始遍历,因为是数据是从左往右,从上到下递增的,分为三种情况:

1.如果右上角那个值恰好是目标值,over

2.右上角那个值比目标值大,这个值所在列被pass掉,其实也就是指针(假设存在指针)左移

3.右上角那个值比目标值小,这个值所在行被pass掉,也就是指针下移

OK,代码如下:

复制代码
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        rows = len(array)-1
        clos = len(array[0])-1
        i = 0
        while i <= rows and clos >=0:
            if array[i][clos] == target:
                return True
            elif array[i][clos] > target:
                clos -= 1
            else:
                 i += 1
        return False
复制代码

 

posted @   嶙羽  阅读(926)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示