• LeetCode240.二维矩阵搜索


    题目

    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

    每行的元素从左到右升序排列。

    每列的元素从上到下升序排列。

    示例 1:

    输入: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
    

    示例 2:

    输入: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 = 20
    输出:false
    

    提示:

    m == matrix.length
    n == matrix[i].length
    1 <= n, m <= 300
    -109 <= matix[i][j] <= 109
    每行的所有元素从左到右升序排列
    每列的所有元素从上到下升序排列
    -109 <= target <= 109
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题方法

    暴力破解

    时间复杂度O(mn) m*n的矩阵
    空间复杂度O(1)
    

    搜索

    时间复杂度O(m+n)每次如果没有搜索到元素返回true,行和列递增或递减,循环结束前不超过m+n次。
    空间复杂度O(1)
    出发点的选取: 
        左上角:往左或者往右都是增大,所以不能选取
        右上角:往左减小往右增大,可选
        左下角:往上减小往右增大,可选
        右下角:往左或者网上都是减小,所以不能取
    

    代码

    // 暴力破解
    func searchMatrix(matrix [][]int, target int) bool {
    	row := len(matrix)
    	col := len(matrix[0])
    	for i := 0;i < row;i++{
    		for j := 0;j < col;j++{
    			if matrix[i][j] == target{
    				return true
    			}
    		}
    	}
    	return false
    }
    
    // 搜索 以左下角为起点
    func searchMatrix2(matrix [][]int, target int) bool {
    	if len(matrix) == 0{
    		return false
    	}
    	row := len(matrix)-1
    	col := len(matrix[0])
    	index := 0
    	// 左下角为起点进行搜索,行列索引越界时结束
    	for row >= 0 && index < col{
    		// 当前元素等于搜索元素返回true
    		if matrix[row][index] == target{
    			return true
    		}
    		// 如果当前元素大于搜索元素,向上移动一行,否则向右移动一列
    		if matrix[row][index] > target {
    			row--
    		}else{
    			index++
    		}
    	}
    	return false
    }
  • 相关阅读:
    slurm.conf系统初始配置
    MySQL数据库服务器(YUM)安装
    Slurm任务调度系统部署和测试(源码)(1)
    并行管理工具——pdsh
    Munge服务部署和测试
    NTP服务部署和测试
    LDAP-openldap服务部署和测试(YUM安装)
    KVM虚拟机管理——虚拟机创建和操作系统安装
    KVM虚拟机管理——虚拟机克隆
    KVM虚拟化环境准备
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15087093.html
Copyright © 2020-2023  润新知