一、给出的是方阵

[[1,6,7,8],

[3,7,8,9],

[9,10,11,12],

[12,13,14,15]]

这种情况非常简单,可知对角线元素应为查找元素,如果target大于对角线上某个元素,那么以此对角线为中心,左边、上边的元素应该都小于target

此时只需要找到一个对角线上的点,当找个一个刚刚好大于target的元素,那么左边和上边进行二分查找即可,python代码如下: # -*- coding:utf-8 -*-

class Solution:

# array 二维列表

def Find(self, target, array):

# write code here

h, w = len(array), len(array[0])

for i in range(min(h, w)):      # 在正方形内对角线查找

if array[i][i] == target:

return True

elif (array[i][i] > target):

for j in range(i): # 这里可以替换成二分查找

if (array[i][j] == target or array[j][i] == target):

return True

return False

考虑到非方阵情况例如

[[1,6,7,8],

[3,7,8,9],

[9,10,11,12],

[12,13,14,15],

[13,14,15,16],

[,18,21,22,23]]

其中array的shape=(6,4)

这时候就不能单一按照对角线考虑,应该将矩阵分块,分成多个小方阵,利用递归的方式现将矩阵分块,然后每一个小方阵按照上述对角线方式查找,python代码如下 # -*- coding:utf-8 -*-

class Solution:

# array 二维列表

def Find(self, target, array):

# write code here

h, w = len(array), len(array[0])

if (h==0 or w==0):

# 递归退出条件,当矩阵不可再分时候,此时为行向量,顺序查找或者二分查找

for i in range(max(h,w)):

if(target == array[i]):

return True

return False

# 如果按照方阵情况查找

for i in range(min(h, w)):      # 在正方形内对角线查找

if array[i][i] == target:

return True

elif (array[i][i] > target):

for j in range(i): # 这里可以查找二分查找

if (array[i][j] == target or array[j][i] == target):

return True

if (h > w): # 如果不是方阵,则递归划分成多个小方阵查找

return self.Find(target, [row[:w] for row in array[i+1:]])

else:

return self.Find(target, [row[i+1:] for row in array[:h]])

php 二维数组中查找,二维数组中的查找相关推荐

  1. arrays中copyof复制两个数组_数组,及二维数组

    1.1 命令行参数(C) 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数. public 命令行参数以字符串的形式传入args数组中.可以一次传递0-多个参数,以空格分割. 如果 ...

  2. [软件工程] 查找二维数组最大子数组的之和 郭莉莉李亚文

    一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...

  3. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  4. c语言中定义字母二维数组,C语言中二维字符数组

    C语言中二维字符数组的定义和初始化 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: Code: 1.char testcase[30][MAX_LENG ...

  5. Java中的数组方法and二维数组

    今日份鼓励:如果你想中一颗树,那么它最好的栽种时间,一个是十年前,一个是现在!! 在这里因为博主的知识能力有限,我将会使用自己能够使用并且解释清楚的方法来完成这篇博客 目录 一.数组的拷贝 二.数组的 ...

  6. PHP查找二维数组的内容

    PHP查找二维数组的内容,主要用到了array_column()和array_search()函数,先介绍一下这两个函数的用法 1.array_column(array, column_key, in ...

  7. Verilog中的二维数组及其初始化

    Verilog中的二维数组 Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这样的数组 ...

  8. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现

    numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...

  9. 用STM32实现:摄像头扫到二维码后提取二维码中的信息分别放到数组中

    摄像头扫到二维码后提取二维码中的信息分别放到数组中 把想要的信息编辑好放到二维码中(网上有好多在线生成二维码的工具) /** *作者:魏波 *时间:2017.6.6 * **/char name[6] ...

  10. Java 中的二维数组

    所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空间 或者 如: 2. 赋 ...

最新文章

  1. 怎样写一个增广矩阵到txt文件中
  2. 阿里云API网关(8)开发指南-SDK下载
  3. SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)
  4. 18f458中断入口C语言_操作系统开发之——中断
  5. 刚刚,Redis公布了5.0版本12项新特性
  6. win10和linux双系统分区大小,win10与Linux双系统分区问题
  7. Jmeter性能测试面试基础问答
  8. 软件项目管理第二章笔记---软件项目整体管理
  9. C语言数组指针和指向数组的指针变量—数组名作函数参数.doc
  10. uart协议学习,从了解到入门,看这篇文章
  11. 开学季:好好聊聊自己的大学生活
  12. 在进行github相关操作的时候一直被要求Enter passphrase for key. 如何避免每次操作都重新填写一遍passphrase?
  13. hdu 6080-度度熊保护村庄
  14. Latex录入参考文献bib.bib文件
  15. 无线USB网卡Rndis设备
  16. 文法去除空产生式_文法化简 (CFG Simplification) 翻译
  17. Buffer.from()
  18. 【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud
  19. 【你好,windows】Windows 10 X64 20H2 19042.868 纯净版2021.3.17
  20. 2022年干式生化分析试剂片市场深度分析及发展研究预测报告

热门文章

  1. 甘超波:NLP平衡轮圈
  2. 【甘道夫】基于scikit-learn实现逻辑回归LogisticRegression
  3. 二维卡通动画制作学习教程
  4. tortoiseGit教程
  5. TortoiseGit第一次使用
  6. i2c时序图的详细讲解
  7. bootstrap之popover插件使用
  8. 东芝dynabook A40-J 评测
  9. cmake+gtest
  10. 劳务员报考建筑八大员报考劳务员工程建筑劳务管理改进的建议