列表

详情


BM18. 二维数组中的查找

描述

在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]

给定 target = 7,返回 true。

给定 target = 3,返回 false。

数据范围:矩阵的长宽满足 , 矩阵中的值满足
进阶:空间复杂度 ,时间复杂度

示例1

输入:

7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

输出:

true

说明:

存在7,返回true

示例2

输入:

1,[[2]]

输出:

false

示例3

输入:

3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

输出:

false

说明:

不存在3,返回false

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Rust 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-07-27

struct Solution{

}

impl Solution {
    fn new() -> Self {
        Solution{}
    }

    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 
        * @param target int整型 
        * @param array int整型二维数组 
        * @return bool布尔型
    */
    pub fn Find(&self, target: i32, array: Vec<Vec<i32>>) -> bool {
        // write code here
        array.iter().any(|arr| arr.iter().any(|item| *item == target))
    }
}

Go 解法, 执行用时: 3ms, 内存消耗: 1340KB, 提交时间: 2021-07-13

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param target int整型 
 * @param array int整型二维数组 
 * @return bool布尔型
*/
func Find( target int ,  array [][]int ) bool {
    // write code here
    line := len(array)
    if(line == 0) {
        return false
    }
    lens := len(array[0])-1
//     if(line == 0|| lens == 1) {
//         return false
//     }
//     if(array[0][0] > target || array[line-1][lens] <target) {
//         return false
//     }
    m :=0
    for {
        if(m>=line ||lens<0 ){
            break
        } 
        if(array[m][lens] < target) {
            m++
        }else if(array[m][lens] > target) {
            lens--
        }else {
            return true
        }
    }
    return false
}

Go 解法, 执行用时: 3ms, 内存消耗: 1372KB, 提交时间: 2021-07-18

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param target int整型 
 * @param array int整型二维数组 
 * @return bool布尔型
*/
func Find( target int ,  array [][]int ) bool {
    // write code here
    n, m := 0, len(array[0]) - 1
    for n < len(array) && m >= 0 {
        if array[n][m] != target {
            if array[n][m] > target {
                m --
            } else {
                n ++
            }
        }else {
            return true 
        }
    }
    return false 
}

Go 解法, 执行用时: 3ms, 内存消耗: 1380KB, 提交时间: 2021-07-23

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param target int整型 
 * @param array int整型二维数组 
 * @return bool布尔型
*/
func Find( target int ,  array [][]int ) bool {
    i, j := 0, len(array[0])-1
    for i < len(array) && j >= 0 {
        if array[i][j] == target {
            return true
        } else if array[i][j] > target {
            j--
        } else {
            i++
        }
    }
    return false
}

Go 解法, 执行用时: 3ms, 内存消耗: 1384KB, 提交时间: 2021-06-14

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param target int整型 
 * @param array int整型二维数组 
 * @return bool布尔型
*/
func Find( target int ,  array [][]int ) bool {
    // write code here
    if len(array) == 0 || len(array[0]) == 0 {
        return false
    }
    
    m, n := len(array), len(array[0])
    
    for i, j := m-1, 0; i >= 0 && j < n; {
        if array[i][j] == target {
            return true
        } else if array[i][j] > target {
            i--
        } else {
            j++
        }
    }
    return false
}

上一题