这里的有序二维数组指的是:每一行都是按照从左到右递增,从每一列都是按照从上到下递增的顺序排序。

我们定义如下的查找规律:

首先选取数组中右上角(也可选择数组左下角)的数字。

  • (1)如果该数字等于要查找的数字,查找过程结束;
  • (2)如果该数字大于要查找的数字,则剔除该数字所在的列;
  • (3)如果该数字小于要查找的数字,则剔除该数字所在的行;

1. 数组右上角(C)

bool Find (int* mat, int rows, int cols, int val)
{if (mat != NULL && rows >= 1 && cols >= 1){int row = 0, col = cols - 1;while (row < row && col >= 0){if (mat[row*cols + col] == val)return true;else if (mat[row*cols + col] < val)++row;else--col;}}return false;
}

2. 数组左下角(python)

def sorted_find(arr, target):row, col = len(arr), len(arr[0])# cmp_cnt = 0row_idx, col_idx = row-1, 0while row_idx >= 0:while col_idx < col:if arr[row_idx][col_idx] > target:# print(row_idx, col_idx)row_idx -= 1# cmp_cnt += 1elif arr[row_idx][col_idx] < target:# print(row_idx, col_idx)col_idx += 1# cmp_cnt += 1else:# print(cmp_cnt)return Truereturn False

3. 数组左下角(Java)

public boolean Find(int target, int [][] array) {if(array == null)return false;int row = array.length - 1;int col = array[0].length - 1;int j = 0;while (row >= 0 && j <= col) {if (array[row][j] > target) {row--;} else if (array[row][j] < target) {j++;} else {return true;}}return false;}

[面试] 算法 —— 数组(有序二维数组的查找)相关推荐

  1. 数据结构与算法--数组:二维数组中查找

    数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...

  2. JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  3. java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  4. c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?

    C++| 匠心之作 从0到1入门学编程[免费]​yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...

  5. C语言中的一维数组和二维数组

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104344394 一 ...

  6. 【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组

    整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理. 目录 数组概述 什么是数组 数组的结构 数组的特点: 数组分类 一维数组声 ...

  7. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))     二维数组(二维数组的遍历.排序.查找.定义 ...

  8. 【java基础】——一维数组和二维数组存储占用内存大小问题

    问题:在java中,一维数组和二维数组在数据量一样的情况下,开辟的内存大小是怎样的? 一.尝试阶段: 1.代码一: public class OneArrayMemory{public static ...

  9. java 动态二维数组_Java数组、动态数组、二维数组的应用

    一.认识数组 1.容器的概念 ​用于存储数据的一块内存称为容器,生活中有很多容器,例如水杯,衣柜,以及存放"东西" ​存放在容器中的数据,称为"元素" 2.为什 ...

最新文章

  1. Verilog中for语句的使用
  2. 河南省第十届大学生程序设计竞赛 A,B,C,D,F,G,H 题解
  3. iOS开发之AFNetworking 3.0.4使用
  4. PHP源码分析-数组
  5. kafka集群原理介绍
  6. 访问windows azure虚拟机iis服务器,如何直接从Java访问Azure/IIS证书?
  7. 牛客题霸 [ 有重复项数字的所有排列] C++题解/答案
  8. Java多线程(6)--Callable接口创建线程
  9. Attribute “singleton” must be declared for element type “bean”.
  10. 转载︱案例 基于贪心算法的特征选择
  11. .sql文件导入mysql数据库中
  12. 工业铝型材是怎样去生产的
  13. Linux中tar压缩命令详解
  14. 服务器无线网卡做ap,通过TP-Link无线网卡设置虚拟AP 看完就明白
  15. 视频教程-玩转Python-Python3基础入门-Python
  16. V4L2框架-media device
  17. 六大原则之依赖倒转(倒置)原则
  18. 警告标志:警告车辆、行人注意危险地点的标志
  19. 严格校验身份证,最后一位如果是X 需大写
  20. WebRTC开源项目-手把手教你搭建AppRTC

热门文章

  1. Android集成JPush(极光推送)
  2. safari only css hack,css hack同时针对Safari和Chrome进行攻击
  3. 小型英语字典(字典训练)
  4. python中input和raw_input的区别
  5. Python——元组Tuple
  6. Java网络编程:TCP实现聊天
  7. 微软05年面临的10大挑战
  8. 树梅派编译opencv并且编译测试流程
  9. php入门代码 基础慕课,php基础入门
  10. vueweb端响应式布局_响应式网站和PC+手机端网站有什么区别?