剑指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
人生苦短,何不用python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现