zoukankan      html  css  js  c++  java
  • LeetCode–二维数组中的查找

    LeetCode–二维数组中的查找

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    说明

    剑指offer,4题,主站 240题

    二维数组中的查找

    题目

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

    示例:

    现有矩阵 matrix 如下:

    [
      [1,   4,  7, 11, 15],
      [2,   5,  8, 12, 19],
      [3,   6,  9, 16, 22],
      [10, 13, 14, 17, 24],
      [18, 21, 23, 26, 30]
    ]
    

    给定 target = 5,返回 true。

    给定 target = 20,返回 false。

    Java

    使用线性查找,从右上角开始查找,因为一行的最大值在右上角,如果比当前的值小,那么就向左查询,如果比当前的值大,那么就向右查

    class Solution {
        public boolean findNumberIn2DArray(int[][] matrix, int target) {
            if(matrix.length == 0 || matrix[0].length == 0){
                return false;
            }
            int x = 0, y = matrix[0].length - 1;
            while(x<matrix.length && y>=0){
                int num = matrix[x][y];
                if(num == target){
                    return true;
                }else if(num > target){
                    y--;
                }else{
                    x++;
                }
            }
            return false;
        }
    }
    

    Go

    使用线性查找,从右上角开始查找,因为一行的最大值在右上角,如果比当前的值小,那么就向左查询,如果比当前的值大,那么就向右查

    func findNumberIn2DArray(matrix [][]int, target int) bool {
        y := len(matrix[0])-1
        x := 0
        for x<len(matrix) && y>=0{
            if matrix[x][y] == target{
                return true
            }else if matrix[x][y] > target{
                y--
            }else{
                x++
            }
        }
        return false;
    }
    

    C

    使用线性查找,从右上角开始查找,因为一行的最大值在右上角,如果比当前的值小,那么就向左查询,如果比当前的值大,那么就向右查

    bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
        int x = 0;
        int y = matrixSize - 1;
        while(x<matrixSize && y>=0){
            if(matrix[x][y] == target){
                return true;
            }else if(matrix[x][y] > target){
                y--;
            }else{
                x++;
            }
        }
        return false;
    }
    

    PHP

    暴力法

    class Solution {
    
        /**
         * @param Integer[][] $matrix
         * @param Integer $target
         * @return Boolean
         */
        function findNumberIn2DArray($matrix, $target) {
            if(count($matrix)==0 || count($matrix[0])==0){
                return false;
            }
            for($i = 0;$i<count($matrix);$i++){
                for($j = 0; $j<count($matrix[$i]);$j++){
                    if($matrix[$i][$j] == $target){
                        return true;
                    }
                }
            }
            return false;
        }
    }
    

    线性查找

    class Solution {
    
        /**
         * @param Integer[] $nums
         * @return Integer
         */
        function findRepeatNumber($nums) {
            $res = [];
            for($i=0;$i<count($nums);$i++){
                if(isset($res[$nums[$i]])){
                    return $nums[$i];
                }
                $res[$nums[$i]] = '';
            }
        }
    }
    

    感谢

    leetcode

    以及勤劳的自己
    关注公众号: 归子莫,获取更多的资料,还有更长的学习计划

  • 相关阅读:
    API网络数据安全
    【值得收藏】一文掌握用户画像系统构建全流程
    手把手教你从0到1学会tensorflow进行模型训练,并能在网页轻松运行
    APP选择第三方消息推送平台时,有哪些需要关注的重要性能指标?
    如何防薅羊毛?个推基于大数据风控引擎助力APP反欺诈!
    微信为什么要搞一个小游戏?
    关于 JS 模块化的最佳实践总结
    张小龙2019微信公开课15个看点总结
    编程:从前有一个傻呆程序员,老婆交给他一项任务,他办了四次才满意
    JS是如何计算 1+1=2 的?
  • 原文地址:https://www.cnblogs.com/guizimo/p/13298654.html
Copyright © 2011-2022 走看看