zoukankan      html  css  js  c++  java
  • 28. 搜索二维矩阵

    写出一个高效的算法来搜索 m × n矩阵中的值。

    这个矩阵具有以下特性:

    • 每行中的整数从左到右是排序的。
    • 每行的第一个数大于上一行的最后一个整数。

    易错点:

    1:二维数组怎么判定为空array.length==0

    2:二维数组怎么取它的列数a[0].length,行数a.length

    3:while循环中的两个条件为什么是逻辑与

    两种思路
    一种是:
    把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,
    时间复杂度是nlogn
    public class Solution {
        public boolean Find(int [][] array,int target) {
             
            for(int i=0;i<array.length;i++){
                int low=0;
                int high=array[i].length-1;
                while(low<=high){
                    int mid=(low+high)/2;
                    if(target>array[i][mid])
                        low=mid+1;
                    else if(target<array[i][mid])
                        high=mid-1;
                    else
                        return true;
                }
            }
            return false;
     
        }
    }
     
    另外一种思路是:
    利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素a[row][col]与target进行比较,
    当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col--;
    当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;
    public class Solution {
        public boolean Find(int [][] array,int target) {
            int row=0;
            int col=array[0].length-1;
            while(row<=array.length-1&&col>=0){
                if(target==array[row][col])
                    return true;
                else if(target>array[row][col])
                    row++;
                else
                    col--;
            }
            return false;
     
        }
    }
  • 相关阅读:
    [深入理解Android卷一全文-第七章]深入理解Audio系统
    【小超_Android】GitHub源码项目整理,希望对大家有帮助
    时序图与状态图(Rose)
    贪吃蛇c++实现
    int*与(int*)的差别
    5、使用Libgdx设计一个简单的游戏------雨滴
    (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍
    springmvc结合base64存取图片到mysql
    /dev/random和/dev/urandom的一点备忘
    Highcharts使用表格数据绘制图表
  • 原文地址:https://www.cnblogs.com/Pjson/p/8289532.html
Copyright © 2011-2022 走看看