二维数组中的查找
来源:互联网 发布:网络测试仪使用 编辑:程序博客网 时间:2024/06/05 19:07
杨氏矩阵:每一行自左向右递增,每一列自上向下递增。
题目:输入一个杨氏矩阵和一个整数,判断这个数是在杨氏矩阵中出现。
分析:有三种时间复杂度各不相同的解法。
第一种:遍历整个二维数组,这种方法效率最低。
第二种:因为杨氏矩阵每行都是递增的,是有序的,我们可以先判断这个整数是否大于等于每行的第一个元素,小于等于最后一个元素。如果是的话,则对这行使用折半查找法进行查找。这种方法效率次之。
第三种:因为每行是递增的,每列也是递增的,我们可以将这个数与最右上角的元素进行比较。如果这个数大于右上角元素,则表明这个数大于这一行元素,因此这个数只可能在这一行的下方出现,所以查找方位缩小到这一行的下方。同样的,如果这个数小于右上角元素,则表明这个数小于这一列元素,因此查找范围可以缩小到这一列的左侧。(也可以与左下角的元素进行比较)这种方式效率最高。
题目:输入一个杨氏矩阵和一个整数,判断这个数是在杨氏矩阵中出现。
分析:有三种时间复杂度各不相同的解法。
第一种:遍历整个二维数组,这种方法效率最低。
第二种:因为杨氏矩阵每行都是递增的,是有序的,我们可以先判断这个整数是否大于等于每行的第一个元素,小于等于最后一个元素。如果是的话,则对这行使用折半查找法进行查找。这种方法效率次之。
第三种:因为每行是递增的,每列也是递增的,我们可以将这个数与最右上角的元素进行比较。如果这个数大于右上角元素,则表明这个数大于这一行元素,因此这个数只可能在这一行的下方出现,所以查找方位缩小到这一行的下方。同样的,如果这个数小于右上角元素,则表明这个数小于这一列元素,因此查找范围可以缩小到这一列的左侧。(也可以与左下角的元素进行比较)这种方式效率最高。
- package offer;
- /**
- *
- * @author taojian
- * @time 2017年3月24日下午2:47:32
- * @ClassName Test01.java
- * @description 在一个二维素组中,每一行按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排序,请
- * 完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
- */
- public class Test01 {
- //这个是正常的思路,但是这样的时间复杂度是O(n*n)
- static boolean isExitNormal(int [][]a,int n,int rows,int columns){
- boolean found=false;
- for(int i=0;i<rows;i++){
- for(int j=0;j<columns;j++){
- if(a[i][j]==n){
- found=true;
- break;
- }
- }
- }
- return found;
- }
- /**
- * @author taojian
- * @time 2017年3月24日下午3:19:48
- * @methodname Test01.java
- * @descripe 时间复杂度O(n)
- */
- static boolean isExit(int [][]a,int n,int rows ,int columns){
- boolean found=false;
- if(rows>0&&columns>0){
- int row=0;
- int colum=columns-1;
- while(row<rows&&colum>=0){
- if(a[row][colum]==n){
- found=true;
- break;
- }else if(a[row][colum]>n)
- --colum;
- else
- ++row;
- }
- }
- return found;
- }
- public static void main(String[] args) {
- int [][]a={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
- System.out.println(isExitNormal(a,7,4,4));
- System.out.println(isExit(a,7,4,4));
- }
- }
0 0
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
- 使用Spring 构建多个moudle的web应用
- 获取虚拟路径
- 什么?你还不会写JQuery 插件
- POJ-2955-Brackets【区间DP】
- 二维数组中的查找
- Dom4j解析和生成XML文档
- html —— 媒体播放object、embed、vedio等元素
- Android主题theme和样式style总结
- 一次完整的HTTP请求与响应
- 101. Symmetric Tree
- spring mvc 与JPA/Hibernate的整合示例
- spring的注入bean的几种方式
- Java设计模式--原型模式