剑指offer----二维数组中的查找的解析与实现
2016-06-14 15:49
429 查看
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:
(1)该数组是有序的 从左到右 从上到下 都是递增的 这是问题的关键
(2)从左下角或者右上角查找
从左下角查找:target比当前元素大,右移。
target比当前元素小,上移。
从右上角查找:target比当前元素大,下移。
从左下角开始查找的实现
从右上角开始查找的实现
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:
(1)该数组是有序的 从左到右 从上到下 都是递增的 这是问题的关键
(2)从左下角或者右上角查找
从左下角查找:target比当前元素大,右移。
target比当前元素小,上移。
从右上角查找:target比当前元素大,下移。
从左下角开始查找的实现
public boolean Find(int [][] array,int target) { //左下角的元素所在的位置是最后一行第0列 int i = array.length-1;//二维数组的行数 int j = 0;//第0列 while(i >= 0 && j < array[0].length)//当行数索引大于等于零 列数索引小于总列数 { if(array[i][j] > target)//如果 { i--; //如果target小于a[i][j],则列不变,行上移 } else if(array[i][j] < target)//如果target小于a[i][j],则行不变,列右移 { j++; } else return true; } return false; }
从右上角开始查找的实现
public boolean Find(int [][] array,int target) { int i = 0; int j = array[0].length-1; while(i < array.length && j >= 0) { if(target < array[i][j] ) { j--; //如果target小于a[i][j],行不变 列左移 } else if(target > array[i][j])//如果target大于a[i][j],列 不变 行下移 { i++; } else return true; } return false; }
相关文章推荐
- Lua中使用二维数组实例
- C#使用二维数组模拟斗地主
- C#二维数组基本用法实例
- javascript的日期对象、数组对象、二维数组使用说明
- PHP 如何获取二维数组中某个key的集合
- 改写函数实现PHP二维/三维数组转字符串
- java 二维数组矩阵乘法的实现方法
- Swift中定义二维数组的方法及遍历方法示例
- 举例理解C语言二维数组的指针指向问题
- C#和Java中二维数组区别分析
- php去除二维数组的重复项方法
- php对二维数组进行相关操作(排序、转换、去空白等)
- php将一维数组转换为每3个连续值组成的二维数组
- PHP中使用foreach()遍历二维数组的简单实例
- php对二维数组按指定键值key排序示例代码
- PHP按指定键值对二维数组进行排序的方法
- PHP将二维数组某一个字段相同的数组合并起来的方法
- js二维数组定义和初始化的三种方法总结
- C语言中二维数组指针的简要说明
- php实例分享之二维数组排序