剑指offer之二维数组中的查找
Posted quxiangjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer之二维数组中的查找相关的知识,希望对你有一定的参考价值。
题目:
在一个 n * m 的二维数组(每个一维数组的长度相同)中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
方法一:暴力法:
思路:用两个for循环遍历整个二维数组,一一比对,找到该整数返回true,没有找到返回false
代码如下
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 for(int i=0;i<array.length;i++) 4 { 5 for(int j=0;j<array[i].length;j++) 6 { 7 if(array[i][j]==target) 8 { 9 return true; 10 } 11 } 12 } 13 return false; 14 } 15 }
方法二:左下查找法:
思路:题目关键语句,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。那么这么一个二维数组的举例
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
[
[1]
]
那么在二维数组左下角的元素,例如18,为该列最大的元素,该行最小的元素,我们每次确定m为这个数,
每次和target进行比较
每当target>m,说明target在m的右边,所以将m的值向右移
每当target<m,说明target在m的上边,所以将m的值向上移
每当target=m,说明target已经找到
代码如下
- class Solution {
- public boolean findNumberIn2DArray(int[][] array, int target) {
- //进行数组长度的检查
- int rows=array.length;
- if(rows==0)
- return false;
- int cols=array[0].length;
- if(cols==0)
- {
- return false;
- }
- int row=rows-1;
- int col=0;
- //开始查找该整数
- while(row>=0 && col<cols)
- {
- if(target > array[row][col])
- {
- col++;
- }
- else if(target < array[row][col])
- {
- row--;
- }
- else
- {
- return true;
- }
- }
- return false;
- }
- }
以上是关于剑指offer之二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章