剑指offer(2) - 二维数组中的查找
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上往下递增的顺序排序。请写一个函数,输入一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都是递增顺序,如果在这个数组中查找数字7,则返回true,如果查找数字5,由于数组中不含有该数字,则返回false。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
public class FindFromMatrix { private static int[][] arr = new int[][] { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } }; public static void main(String[] args) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } System.out.println(find(arr, 4, 4, 7)); } public static boolean find(int[][] arr, int rows, int columns, int target) { boolean found = false; if (arr != null && rows > 0 && columns > 0) { int row = 0; int column = columns - 1; while (row < rows && column >= 0) { int tmp = arr[row][column - 1]; // 从右上角元素开始匹配 if (target > tmp) { row++; // 目标元素较大,元素不可能在当前行,行递增 } else if (target < tmp) { column--; // 目标元素较小,元素不可能在当前列,列递减 } else { found = true; // 找到了,返回true break; } } } return found; } }解题方法:从数组的右上角开始查找,这样的话可以不断的缩小查找的范围,直到找到目标元素。
总结:当我们解决一个问题的时候,一个很有效的方法就是从一个具体的问题入手,通过分析简单的例子,有时候可以找到普遍的规律。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。