题解 | #1. 二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
解题思路
- 判断右上角数字与目标大小
- 如果右上角大于目标,剔除最后一列
- 如果右上角等于目标返回true
- 如果右上角小于目标,剔除第一行
- eg
- 目标6,初始矩阵如图
1 2 8 9 2 4 9 12 4 7 9 12 6 8 11 15
- 9>6,剔除最后一列,查找区域为
1 2 8 2 4 9 4 7 9 6 8 11
- 8>6,剔除最后一列,查找区域为
1 2 2 4 4 7 6 8
- 2<6,剔除第一行,查找区域为
2 4 4 7 6 8
- 4<6,剔除第一行,查找区域为
4 7 6 8
- 7>6,剔除最后一列,查找区域为
4 6
- 4<6,剔除第一行,查找区域为
6
- 6=6,查找结束,返回true
- 若目标为5,5<6,剔除第一行,行数越界,查找结束,返回false
- 目标6,初始矩阵如图
代码
public class Solution { public boolean Find(int target, int [][] array) { /* * 思路 * 判断右上角数字与目标大小 * 如果右上角大于目标,剔除最后一列 * 如果右上角等于目标返回true * 如果右上角小于目标,剔除第一行 * */ // 特殊情况 if (array==null){ return false; } // 初始右上角元素 int row = 0, column = array[0].length-1; // 当行数列数越界时结束循环 while (row<=array.length-1 && column>=0){ if (array[row][column]>target){ column--; }else if (array[row][column]<target){ row++; }else if (array[row][column]==target){ return true; } } return false; } }