剑指Offer——二维数组中的查找
1、题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2、代码实现:
package com.baozi.offer; /** * 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, * 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数, * 判断数组中是否含有该整数。 * * @author BaoZi * @create 2019-07-10-17:11 */ public class Offer { public static void main(String[] args) { int[][] array = new int[][]{{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}}; Offer offer = new Offer(); boolean result = offer.Find(5, array); System.out.println(result); } public boolean Find(int target, int[][] array) { //先判断给定的二维数组是否是空 if (array == null || array.length == 0) { return false; } //定义两个指针,根据数组的特点在对指针进行初始化的时候先指向数组的左上角的位置 int i = 0; int j = array[0].length - 1; while (i <= array.length - 1 && j >= 0) { //如果当前的指针指向的数组元素和目标元素一直,证明二维数组中存在待查找元素 if (array[i][j] == target) { return true; //如果当前指针指向的数组元素比目标元素值大,那么目标元素如果存在的化一定是在当前元素的前一列 } else if (array[i][j] > target) { j--; //如果当前指针指向的数组元素比目标元素值小,那么目标元素如果存在的化一定是在当前元素的下一行 } else { i++; } } return false; } }