剑指offer面试题3:二维数组中的查找 java实现

本文介绍了一种高效的方法来查找在特定排序规则下的二维数组中是否存在某个整数,通过逐步排除行和列来缩小搜索范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

例如:

1    2    8    9

2    4    9   12

4    7   10  13

6    8   11  15

如果查找数字7,则返回true,如果查找5,则返回false;


题目分析:首先应该先选取数组中右上角的数字,如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列,如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说,如果要查找的数字不再二维数组的右上角,则每次都在数组的查找范围内剔除一行或一列,这样每一步都可以缩小查找范围,直到找到要查找的数字,或者查找范围为空(本段摘自 何海涛 《剑指offer》书中)。


程序实现:

/**************************************************************             
* 版 本 号:v1.0                  
* 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序。
*			请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*			例如:1  2  8  9
*			      2  4  9  12
*			      4  7  10 13
*			      6  8  11 15		如果查找数字7,则返回true,如果查找5,则返回false;
* 问题分析:1.在调用FindFromMatrix类时,需要用到对象名.函数名。
*<span style="white-space:pre">			</span>findfrommatrix.getValueFromMatrix(findfrommatrix.sample,4,4,7)
* 输入描述:无
* 程序输出:	<span style="white-space:pre">		</span>  1  2  8  9
*				  2  4  9  12
*				  4  7  10 13
*				  6  8  11 15	
*				  true
***************************************************************/
class FindFromMatrix{
	public static int[][] sample = new int[][] {{1,2,8,9},
	{2,4,9,12},{4,7,10,13},{6,8,11,15}};
	public static void pirntSample(){
		for(int i = 0 ;i < sample.length;i++){
			for(int j = 0; j<sample.length;j++){
				System.out.print(sample[i][j] + " ");
			}
			System.out.println();
		}
	}
	public static boolean getValueFromMatrix(int[][] sample,int rows,
		int columns,int number){
		boolean found = false;
		if(sample != null && rows > 0 && columns > 0){
			int row = 0;
			int column = columns - 1;
			while(row < rows && column >= 0){
				int tempValue = sample[row][column];
				if(number > tempValue){
					++row;
				}else if(number < tempValue){
					--column;
				}else{
					found = true;
					break;
				}
			}
		}
		return found;
	}
	
}
public class find_args{
	public static void main(String args[]){
		//pirntSample();
		FindFromMatrix findfrommatrix = new FindFromMatrix();
		findfrommatrix.pirntSample();
		System.out.println(findfrommatrix.getValueFromMatrix(
			findfrommatrix.sample,4,4,7));
	}
}


程序输出结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值