二维有序数组查找某值

此处设为各行各列递增的数组,示例如下:

该类数组查找的要点是找到起点,若如上所示是各行各列递增,那么可选取右上角顶点为起点,效果为:当搜索值(称为num)不等于该顶点值(称为point)时,搜索范围可一致减小;

所谓一致减小,就是范围减小后符合同一规律:

在该例中,由于递增:

若 num〉point,可确定该点所在行均不符合要求,可将该point下移一行;

搜索范围简化为:


若 num〈point,可确定该点所在列均不符合要求,可将该point左移一列;

搜索范围简化为:

若数列为递减:大笑微笑微笑微笑微笑大笑

JAVA代码如下:

public class Main {
	private int[][] array = new int[][] { { 1, 2, 8, 9 }, { 2, 4, 9, 12 },
			{ 4, 7, 10, 13 }, { 6, 8, 11, 15 } };

	public boolean search(int N, int M, int num) {
		int startRow = 0;
		int startCol = M - 1;
		while (startRow < N && startCol >= 0) {
			if (array[startRow][startCol] < num)
				startRow++;
			else if (array[startRow][startCol] > num)
				startCol--;
			else
				return true;
		}
		return false;
	}

	public static void main(String[] args) {
		Main m = new Main();
		System.out.println(m.search(4, 4,5));
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值