`
up2pu
  • 浏览: 223112 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面试题3:二维数组中的查找

阅读更多
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。


分析:
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——名企面试官精讲典型编程题》
分享到:
评论

相关推荐

    wyh317#JZoffer#面试题4:二维数组中的查找1

    测试用例特殊输入测试(空指针)二维数组包括要查找的数字(target为数组最大值、target为数组最小值、target位于数组最大值和最小值之间)二维数组不包

    剑指Offer(Python多种思路实现):二维数组中的查找

    剑指Offer(Python多种思路实现):二维数组中的查找 面试4题: 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个...

    面试高频算法题总结-剑指Offer题解

    面试题4:二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:裴波那契数列 面试题11:旋转数组的最小数字 面试题...

    java基础面试题二维数组中查找

    java基础面试题二维数组中查找本资源系百度网盘分享地址

    剑指offer(java版67题)

    面试题 1:二维数组中的查找(考点: 数组) 1 面试题 2:替换空格(考点: 字符串) 2 面试题 3:从尾到头打印链表(考点: 链表) 2 面试题 4:重建二叉树(考点: 树) 4 面试题 5:用两个栈实现队列(考点: 栈和...

    练习题4-二维数组中的查找.cpp

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个证书,判断数组中是否含有该整数。C语言完整代码。.cpp格式

    【剑指offer】面试题4-二维数组中的查找-完整的可执行代码(Java)

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题...

    jianzhi-offer:剑指offer面试题-javascript版源码与测试用例

    面试题03:二维数组中的查找 面试题06:重建二叉树 面试题08:旋转数组中的最小数 面试题10:二进制中1的个数 面试题14:调整数组顺序使奇数位于偶数前面 面试题18:树的子结构 面试题20:顺时针打印矩阵 面试题21:...

    《剑指Offer》系列一——二维数组中的查找

    在本题中,由于二维数组的特殊结构,可以沿着每一列的正向或反向进行二分查找,以提高查找效率。然而,这需要更复杂的逻辑来处理边界情况和列的查找顺序。 总结来说,这道题主要考察了对二维数组的理解和遍历技巧,...

    leetcode迷宫问题-LeetCode:LeetCode刷题之剑指offer系列

    面试题04:二维数组中的查找 +2 有序矩阵查找 面试题05:替换空格 +2 查找 面试题06:从尾到头打印链表 +2 栈+双数组 面试题07:重建二叉树 +2 递归 面试题09:用两个栈实现队列 +2 双栈 面试题10 - I:斐波那契数列...

    python编程老师面试题_python面试题五:Python编程

    杨辉矩阵查找是一种经典的查找问题,目的是在一个 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. **数组的优化**: - 使用动态规划和空间优化技术,如数组下标映射,减少不必要的...

    leetcode二维数组-programming_exercises:leetcode、nowcoder刷题之路

    二维数组中的查找: 替换空格: 从尾到头打印链表: 重建二叉树: 用两个栈来实现队列: 旋转数组的最小数字: 斐波那契数列: 跳台阶: 跳台阶2: 矩形覆盖: 二进制中1的个数 数值的整数次方: 调整数组顺序,使奇数位于偶数...

    No4_fliesdm7_familywbh_剑指offer_

    【描述】"剑指offer第4题,二维数组查找,已过牛客网。" 这句话告诉我们这个编程任务是关于在二维数组中进行查找操作的。"已过牛客网"可能意味着这个解决方案已经在牛客网(一个在线编程练习和竞赛平台)上通过了...

    前端大厂最新面试题-algorithm.docx

    知识点:二维数组查找算法,使用JavaScript实现二维数组查找。 44. 如何从三个有序数组中找出它们的公共元素。 知识点:数组查找算法,使用JavaScript实现数组查找。 加密部分 90. 简单讲一下关于加密算法相关的...

    java面试题-leetcode题解之第74题搜索二维矩阵.zip

    在实现过程中,需要注意边界条件的处理,以及在二维数组中正确地应用二分查找算法。此外,由于这是面试题,还要考虑代码的可读性、效率和空间复杂度。 Java编程方面,我们需要掌握以下要点: 1. 对二维数组的操作:...

    数组类型.rar

    8. **矩阵操作**:二维数组的处理,如矩阵转置、矩阵乘法、最短路径问题等。 9. **前缀和**:用于求解区间和问题,常用于解决和、差、积等问题,简化算法逻辑。 10. **堆数据结构**:大顶堆或小顶堆在数组中的实现...

    剑指offer之python实现

    面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从尾到头打印单链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 2.4 算法和数据操作 面试题8 旋转数组的最小数字 面试题9 斐波那契数列 面试题10 二进制中1的...

    校园招聘历年经典面试题汇总:游戏研发岗1

    6. **凸包**:计算几何中的概念,指的是在二维平面上包围所有点的最小凸多边形。面试中可能需要手写实现如Graham扫描或Jarvis March算法。 7. **大并发实时排序与排名**:这涉及并发控制和数据结构设计,如使用跳跃...

    程序员面试题集锦

    1. 数组:线性数据结构的基础,包括一维数组、二维数组以及动态数组ArrayList和LinkedList的比较。 2. 链表:单链表、双向链表的操作,链表的插入、删除和查找操作。 3. 栈与队列:栈的后进先出特性,队列的先进先...

Global site tag (gtag.js) - Google Analytics