01-面试题4--二维数组中的查找

package com.my.offer;
/**
 * 二维数组的查找
 * @author asus
 *
 */
public class Solution01 {
	/**
	 * 二维数组的查找:
	 * 从右上角开始查找,因为二维数组每行从左到右递增,每列从上
	 * 到下递增,因此:
	 * 1.当目标元素小与当前元素,则将小与当前列的所有元素,当前
	 * 列可以排除
	 * 2.当目标元素大于当前元素,则将大于当前行所有元素,当前行
	 * 可以排除
	 * 3.当目标元素等于当前元素,则找到该元素,查找结束
	 * @param target 目标元素
	 * @param matrix 二维矩阵
	 * @return
	 */
	public boolean find(int target, int[][] array) {
		//边界条件判断
		if(array.length == 0 || array[0].length == 0 )
			return false;
		//二维数组的行数,对应i
		int rows = array.length - 1;
		//二维数组的列数,对应j
		int cols = array[0].length - 1;
		//从二维数组的右上角位置开始查找
		int i = 0;
		int j = cols;
		//边界条件
		while(i <= rows && j >= 0) {
			//如果目标数字大于此刻查找的数字,则必定大于此行所有数字,则行数++
			if(target > array[i][j]) {
				i++;
			} else if(target < array[i][j]) {
				//如果目标数字小于此刻查找的数字,则必定小于此列所有数字,则列数--
				j--;
			}else {
				//否则此刻查找的数字就是目标数字
				return true;
			}	
		}
		//没有查找到该数字则返回false
		return false;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值