zoukankan      html  css  js  c++  java
  • LeetCode 面试题4 二维数组中的查找

    LeetCode 面试题4 二维数组中的查找

    问题描述:
    在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    递归

    • 矩阵反对角线 (右上到左下) 上的元素将矩阵中的所有元素分为两半 (左上小于、右下大于)
    • 从反对角线上任一元素出发,搜索目标元素 target
    • 若 target 大于当前元素,则下一步向下、右方向搜索
    • 若 target 小于当前元素,则下一步向上、左方向搜索
    • 最后若 target 等于当前元素,则返回 true
    • 整个过程采用递归实现

    执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
    内存消耗:43.9 MB, 在所有 Java 提交中击败了96.10%的用户

    class Solution {
        public boolean findNumberIn2DArray(int[][] array, int target) {
            if(array==null || array.length==0 || array[0].length==0) {
                return false;
            }
            
            int rows = array.length, cols = array[0].length;
            return rec(array, new int[]{0, cols-1}, target, new boolean[rows][cols]);
        }
    
        public boolean rec(int[][] array, int[] curr, int target, boolean[][] visited) {
            //target与array[curr[0]][curr[1]]比较
            //大于则向右、向下;小于则向左、向上;等于则返回True
            //若两个方向均已访问,则返回False
            if(curr[0]<0 || curr[0]>=array.length 
               || curr[1]<0 || curr[1]>=array[0].length) {
                return false;
            }
            else if(visited[curr[0]][curr[1]]) {
                return false;
            }
            
            visited[curr[0]][curr[1]] = true;
            if(array[curr[0]][curr[1]]==target) {
                return true;
            }
            else if(array[curr[0]][curr[1]]>target) {
                return rec(array, new int[]{curr[0]-1, curr[1]}, target, visited) 
                    || rec(array, new int[]{curr[0], curr[1]-1}, target, visited);
            }
            else {
                return rec(array, new int[]{curr[0]+1, curr[1]}, target, visited) 
                    || rec(array, new int[]{curr[0], curr[1]+1}, target, visited);
            }
        }
    }
    
  • 相关阅读:
    Docker Mysql 只从复制
    Mysql 常用sql记录
    ssh 内网穿透
    MyBatis相关记录
    mybatis(plus) 继承子模块的 Mapper文件
    Navicat 连接 Mysql 错误 2059
    angular service 进行组件通信
    angular 中的 ? 和 !
    angular @Input() 和 @Output()
    Centos7 安装 Docker CE
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13907982.html
Copyright © 2011-2022 走看看