题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
以查找7为例,从右上角开始:
1.9大于7,下一次只需要在9的左边区域查找
2.8大于7,下一次只需要在8的左边区域查找
3.2小于7,下一次只需要在2的下边区域查找
4.4小于7,下一次只需要在4的下边区域查找
代码:
bool Find(int* matrix, int rows, int columns, int number)
{
bool found = false;
if(matrix != NULL && rows > 0 && columns > 0)
{
int row = 0;
int column = columns - 1;
while(row < rows && column >= 0)
{
if(matrix[row * columns + column] == number)
{
found = true;
break;
}
else if(matrix[row * columns + column] > number)
-- column;
else
++ row;
}
}
return found;
}
package net.ecoolsoft.question;
public class SearchInArray {
/**
* 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
* 每一列都按照从上到下递增的顺序排序。请完成一个函数,
* 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
* @param data 数组
* @param key 要查找的数字
* @return 找到返回true,未找到返回false
*/
public boolean findInArray(int[][] data, int key) {
if(data == null || data.length == 0) {
return false;
}
int i = 0;
int j = data[0].length-1;
while(i<data.length && j>=0) {
if(data[i][j] == key) {
return true;
} else if(data[i][j] > key) {
j--;
} else {
i++;
}
}
return false;
}
}
package net.ecoolsoft.question;
import junit.framework.Assert;
import org.junit.Test;
public class SearchInArrayTest {
@Test
public void findInArrayFailedTest() {
int[][] data = {{1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,15}};
int key = 14;
SearchInArray sArray = new SearchInArray();
boolean result = sArray.findInArray(data, key);
Assert.assertFalse(result);
}
@Test
public void findInArrayTest() {
int[][] data = {{1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,15}};
int key = 11;
SearchInArray sArray = new SearchInArray();
boolean result = sArray.findInArray(data, key);
Assert.assertTrue(result);
}
}
参考资料:《剑指Offer——名企面试官精讲典型编程题》
分享到:
相关推荐
测试用例特殊输入测试(空指针)二维数组包括要查找的数字(target为数组最大值、target为数组最小值、target位于数组最大值和最小值之间)二维数组不包
剑指Offer(Python多种思路实现):二维数组中的查找 面试4题: 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个...
面试题4:二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:裴波那契数列 面试题11:旋转数组的最小数字 面试题...
java基础面试题二维数组中查找本资源系百度网盘分享地址
面试题 1:二维数组中的查找(考点: 数组) 1 面试题 2:替换空格(考点: 字符串) 2 面试题 3:从尾到头打印链表(考点: 链表) 2 面试题 4:重建二叉树(考点: 树) 4 面试题 5:用两个栈实现队列(考点: 栈和...
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个证书,判断数组中是否含有该整数。C语言完整代码。.cpp格式
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题...
面试题03:二维数组中的查找 面试题06:重建二叉树 面试题08:旋转数组中的最小数 面试题10:二进制中1的个数 面试题14:调整数组顺序使奇数位于偶数前面 面试题18:树的子结构 面试题20:顺时针打印矩阵 面试题21:...
在本题中,由于二维数组的特殊结构,可以沿着每一列的正向或反向进行二分查找,以提高查找效率。然而,这需要更复杂的逻辑来处理边界情况和列的查找顺序。 总结来说,这道题主要考察了对二维数组的理解和遍历技巧,...
面试题04:二维数组中的查找 +2 有序矩阵查找 面试题05:替换空格 +2 查找 面试题06:从尾到头打印链表 +2 栈+双数组 面试题07:重建二叉树 +2 递归 面试题09:用两个栈实现队列 +2 双栈 面试题10 - I:斐波那契数列...
杨辉矩阵查找是一种经典的查找问题,目的是在一个 m 行 n 列的二维数组中查找一个整数。下面是解决杨辉矩阵查找的问题代码: ``` def get_value(l, r, c): return l[r][c] def find(l, x): m = len(l) - 1 n = ...
- 二维数组可视为数组的数组,常用于处理表格数据。 - 多维数组的索引通常是嵌套的,如`arr[i][j]`表示第i行第j列的元素。 8. **数组的优化**: - 使用动态规划和空间优化技术,如数组下标映射,减少不必要的...
二维数组中的查找: 替换空格: 从尾到头打印链表: 重建二叉树: 用两个栈来实现队列: 旋转数组的最小数字: 斐波那契数列: 跳台阶: 跳台阶2: 矩形覆盖: 二进制中1的个数 数值的整数次方: 调整数组顺序,使奇数位于偶数...
【描述】"剑指offer第4题,二维数组查找,已过牛客网。" 这句话告诉我们这个编程任务是关于在二维数组中进行查找操作的。"已过牛客网"可能意味着这个解决方案已经在牛客网(一个在线编程练习和竞赛平台)上通过了...
知识点:二维数组查找算法,使用JavaScript实现二维数组查找。 44. 如何从三个有序数组中找出它们的公共元素。 知识点:数组查找算法,使用JavaScript实现数组查找。 加密部分 90. 简单讲一下关于加密算法相关的...
在实现过程中,需要注意边界条件的处理,以及在二维数组中正确地应用二分查找算法。此外,由于这是面试题,还要考虑代码的可读性、效率和空间复杂度。 Java编程方面,我们需要掌握以下要点: 1. 对二维数组的操作:...
8. **矩阵操作**:二维数组的处理,如矩阵转置、矩阵乘法、最短路径问题等。 9. **前缀和**:用于求解区间和问题,常用于解决和、差、积等问题,简化算法逻辑。 10. **堆数据结构**:大顶堆或小顶堆在数组中的实现...
面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从尾到头打印单链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 2.4 算法和数据操作 面试题8 旋转数组的最小数字 面试题9 斐波那契数列 面试题10 二进制中1的...
6. **凸包**:计算几何中的概念,指的是在二维平面上包围所有点的最小凸多边形。面试中可能需要手写实现如Graham扫描或Jarvis March算法。 7. **大并发实时排序与排名**:这涉及并发控制和数据结构设计,如使用跳跃...
1. 数组:线性数据结构的基础,包括一维数组、二维数组以及动态数组ArrayList和LinkedList的比较。 2. 链表:单链表、双向链表的操作,链表的插入、删除和查找操作。 3. 栈与队列:栈的后进先出特性,队列的先进先...