二维数组查找
来源:互联网 发布:淘宝个人主页怎么看 编辑:程序博客网 时间:2024/06/14 12:21
题目:(剑指offer, page38)
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,完成一个函数,输入一个这样的二维数组和一个整数,判断该数组中是否有该整数。
书中提供一种算法:
思路:
从数组的右上角元素开始比较,如果该元素等于要查找的元素,OK。
如果该元素大于要查找的元素,那么该元素所在的列中的所有元素一定都大于所要搜索的元素,剔除该元素所在的列。
如果该元素小于要查找的元素,那么该元素所在的行中的所有元素一定都小于所要搜索的元素,剔除该元素所在的行。
这样逐步缩小搜索范围,直到找到所要的元素,或者搜索范围为空。
Java 代码:
/** * <p> * 题目:(剑指offer, page38) * <p> * 在一个二维数组中,每一行都按照从左到右递增的顺序排序, * <p> * 每一列都按照从上到下递增的顺序排序, * <p> * 完成一个函数,输入一个这样的二维数组和一个整数,判断该数组中是否有该整数。 * * @author likebamboo */public class ArraySearch { /** * 剑指offer上给出的算法 * * @param data 数据源 * @param key 需要查找的值 * @return */ private static boolean find1(int[][] data, int key) { if (data == null || data.length == 0 || data[0].length == 0) { return false; } // 所选择的元素的下标 int row = 0, col = data[0].length - 1; while (row < data.length && col >= 0) { if (data[row][col] == key) { return true; } // 如果当前元素大于要查找的值,删除该元素所在的列 if (data[row][col] > key) { col--; } else {// 如果当前元素小于要查找的值,删除该元素所在的行 row++; } } return false; } public static void main(String[] args) { int[][] data = new int[][] { { 1, 2, 4, 6, 10 }, { 2, 6, 8, 9, 11 }, { 4, 7, 10, 13, 14 }, { 6, 8, 11, 18, 20 }, { 8, 10, 13, 20, 25 }, { 12, 13, 17, 25, 30 }, { 19, 22, 25, 30, 33 }, { 20, 25, 27, 40, 41 }, { 25, 30, 35, 44, 46 }, { 26, 48, 45, 50, 60 } }; int key = 41; System.out.println(find1(data, key)); }}
- 二维数组查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组查找
- 二维数组中的查找
- 二维数组的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组查找
- 二维数组中的查找
- 二维数组查找
- 二维数组中的查找
- 二维数组中的查找
- .net server control
- mouseout与mouseleave
- uva 10344 23 Out of 5
- 我的日记----IOS系统架构
- hdu2068RPG的错排
- 二维数组查找
- oracle分区了解
- mysql 不能插入中文的解决办法,修改mysql的字符集,操作见蓝色字体部分
- WINDOWS XP 按CTRL+ALT+DEL后不是直接跳出任务管理器,而是跳出WINDOWS安全
- javascript教程
- 在MFC中添加用户自定义消息
- 28-JavaScript-面向对象-系统函数-内部类-Math-Date-String-Array-Boolean-Number
- android开发中难免遇到listview刷新数据出现异常
- 类型转换函数