剑指offer第二版-4二维数组中的查找

题目:在一个二维数组中,每一行按照从左到右递增的顺序排列,每一列按照从上到下递增的顺序排列,输入一个二维数组和整数,判断数组中是否含有该整数
思路:

  1. 如果按常规想法,可以把二维数组画成矩形,然后从数组中选取一个数字,如果这个数字与要查找的数字相等,结束查找过程。如果选取的数字小于要查找的数字,那么要查找的数字就在这个数字的右边或者下边。同样地,如果要查找的数字大于这个数字,那么应该选取当前数字右边或者上边的数字。这样的话就会有两个区域出现,并且有很大的重复区域,问题变得复杂化。
  2. 首先选取数组右上角的数字与要查找的数字进行比较,如果该数字等于要查找的数字,查找结束。如果这个数字小于要查找的数字,则剔除当前行,并向下一行查找。如果这个数字大于要查找的数字,那么剔除当前列,向上一列查找。不停重复即可。

代码:

/**
 * 在一个二维数组中,每一行按照从左到右递增的顺序排列,每一列按照从上到下递增的顺序排列,输入一个二维数组和整数,判断数组中是否含有该整数
 *
 * @author VicterTian
 * @version V1.0
 * @Date 2019/1/19
 */
public class P44_FindInPartiallySortedMatrix {
	public static void main(String[] args) {
		int[][] array =
				{
						{1, 2,  8,  9, 10},
						{2, 4,  9, 12, 16},
						{4, 7, 10, 13, 17},
						{6, 8, 11, 15, 18}
				};
		System.out.println(findInPartiallySortedMatrix(array, 18));
		System.out.println(findInPartiallySortedMatrix(array, 5));
	}

	private static boolean findInPartiallySortedMatrix(int[][] array, int num) {
		if (array == null || array.length == 0 || array[0].length == 0) {
			return false;
		}
		// 计算总行数(从0开始)
		int rows = array.length - 1;
		// 计算总列数(从0开始)
		int columns = array[0].length - 1;
		// 设置初始行
		int row = 0;
		// 设置初始列
		int column = columns;
		while (row <= rows && column >= 0) {
			if (array[row][column] == num) {
				return true;
			} else if (array[row][column] > num) {
				--column;
			} else if (array[row][column] < num) {
				++row;
			}
		}
		return false;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值