[面试] 算法 —— 数组(有序二维数组的查找)
这里的有序二维数组指的是:每一行都是按照从左到右递增,从每一列都是按照从上到下递增的顺序排序。
我们定义如下的查找规律:
首先选取数组中右上角(也可选择数组左下角)的数字。
- (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;}
[面试] 算法 —— 数组(有序二维数组的查找)相关推荐
- 数据结构与算法--数组:二维数组中查找
数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?
C++| 匠心之作 从0到1入门学编程[免费]yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...
- C语言中的一维数组和二维数组
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104344394 一 ...
- 【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组
整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理. 目录 数组概述 什么是数组 数组的结构 数组的特点: 数组分类 一维数组声 ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义 ...
- 【java基础】——一维数组和二维数组存储占用内存大小问题
问题:在java中,一维数组和二维数组在数据量一样的情况下,开辟的内存大小是怎样的? 一.尝试阶段: 1.代码一: public class OneArrayMemory{public static ...
- java 动态二维数组_Java数组、动态数组、二维数组的应用
一.认识数组 1.容器的概念 用于存储数据的一块内存称为容器,生活中有很多容器,例如水杯,衣柜,以及存放"东西" 存放在容器中的数据,称为"元素" 2.为什 ...
最新文章
- Verilog中for语句的使用
- 河南省第十届大学生程序设计竞赛 A,B,C,D,F,G,H 题解
- iOS开发之AFNetworking 3.0.4使用
- PHP源码分析-数组
- kafka集群原理介绍
- 访问windows azure虚拟机iis服务器,如何直接从Java访问Azure/IIS证书?
- 牛客题霸 [ 有重复项数字的所有排列] C++题解/答案
- Java多线程(6)--Callable接口创建线程
- Attribute “singleton” must be declared for element type “bean”.
- 转载︱案例 基于贪心算法的特征选择
- .sql文件导入mysql数据库中
- 工业铝型材是怎样去生产的
- Linux中tar压缩命令详解
- 服务器无线网卡做ap,通过TP-Link无线网卡设置虚拟AP 看完就明白
- 视频教程-玩转Python-Python3基础入门-Python
- V4L2框架-media device
- 六大原则之依赖倒转(倒置)原则
- 警告标志:警告车辆、行人注意危险地点的标志
- 严格校验身份证,最后一位如果是X 需大写
- WebRTC开源项目-手把手教你搭建AppRTC