【笔试】21、二维数组中的查找

/**
 *题目:在一个二位数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二位数组和一个整数,
 *		判断数组中是否含有该整数
 *时间:2015年8月25日09:51:08
 *文件:FindInMatrix.java
 *作者:cutter_point
 */
package bishi.Offer50.y2015.m08.d25;

public class FindInMatrix
{
	/**
	 * 在一个二维数组中寻找到我们要找的数
	 * @param matrix	二维数组
	 * @param rows		行
	 * @param columns	列
	 * @param key		我们要寻找的值
	 * @return
	 */
	public static boolean Find(int matrix[][], int rows, int columns, int key)
	{
		boolean found = false;	//用来判断是否找到
		//首先我们判断数组是否为空
		if(matrix == null || rows <= 0 || columns <= 0)
		{
			System.err.println("数据异常");
			return false;
		}

		//我们知道这是一个递增的数组,我们选这个矩阵的一个对角,比如左下角,作为起始基准进行遍历
		int row = rows - 1, col = 0;
		//当我们的数比这个数还大的时候,我们就可以判处当前的列,在右边寻找
		//当我们的数比这个数小的时候,我们就可以排除当前行,在上面寻找,这样不断逼近我们的值,
		while(row > -1 && col < columns)
		{
			if(matrix[row][col] < key)
			{
				//比寻找的数大
				++col;
			}//if
			else if(matrix[row][col] > key)
			{
				//比寻找的数小
				--row;
			}//else if
			else
			{
				found = true;
				break;	//找到了之后退出
			}//else 相等的时候
		}//while在二维数组内寻找

		return found;
	}

	public static void Test(int key)
	{
		int maxtrix[][] =
			{
				{1, 2, 8, 9},
				{2, 4, 9, 12},
				{4, 7, 10, 14},
				{8, 9, 12, 16}
			};

		int columns = maxtrix.length;
		int rows = maxtrix.clone().length;
		boolean find = Find(maxtrix, rows, columns, key);
		System.out.println(find);
	}

	public static void main(String[] args)
	{
		Test(998);
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-28 21:09:52

【笔试】21、二维数组中的查找的相关文章

[剑指Offer]5.二维数组中的查找

题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 [算法系列之三十三]杨氏矩阵 代码 /*--------------------------------------- * 日期:2015-07-19 * 作者:SJF0115 * 题目: 5.二维数组中的查找 * 网址:http://www.nowcoder.com/books/coding-interviews/a

java实现——003二维数组中的查找

1 import java.util.Scanner; 2 3 public class T003 { 4 5 public static void main(String[] args) { 6 Scanner in = new Scanner(System.in); 7 int rows = 0, cols = 0; 8 rows = in.nextInt(); 9 cols = in.nextInt(); 10 int a[][] = new int[rows][cols]; 11 for

[Jobdu] 题目1384:二维数组中的查找

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数. 输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字. 接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每

二维数组中的查找-牛客网-剑指offer

1.问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.问题分析 水平方向.垂直方向二重循环查找 3.源代码 package www.nowcoder.com.conquerOffer.array; /** * 二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整

递增二维数组中的查找

/* * 二维数组从左到右,从上到下递增 * 查找输入的数,效率尽可能高 * 思路:从右上角或左下角开始查找 */ import java.util.Scanner; public class findTarget { public static boolean find(int [][]a,int rows,int cols,int target){ boolean found=false; int count=0;//移动次数 if(a!=null){ int row=0; int col=

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找 /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数. */ ps:(其实前段时间我就做过这道题,今天看到了,觉得还是有点生,那就再来一次吧) 题目分析:  在分析这个问题的时候,我们首先要看,在一个二维数组中查找一个数字是否存在,那么很多人就觉得 简单了,遍历二维数组与所需要查找的数字进行比较不就完了!  不可否认的是你说的是可行的,可是

【剑指Offer面试题】二维数组中的查找

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个

【剑指Offer面试题】九度OJ1384:二维数组中的查找

下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有优点的.加油~ 题目链接地址: http://ac.jobdu.com/problem.php?pid=1384 二维数组中的查找

二维数组中的查找-剑指Offer

二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入描述 array: 待查找的二维数组 target:查找的数字 输出描述 查找到返回true,查找不到返回false 思路 因为数组是从左到右从上到下都是递增排序的,所以我们可以从右上角开始查找,如果右上角的数比target大,那它所在的这一列都大,可以舍去,直到找到小的,然后开始从上向下找,若右上

剑指Offer面试题:2.二维数组中的查找

一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例如下面的二维数组就是每行.每列都递增排序.如果在这个数组中查找数字7,则返回true:如果查找数字5,由于数组不含有该数字,则返回false. 二.解题思路 首先选取数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查