zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    Bridge Design Pattern
    终于写了个自己的简单MVC框架!
    c 第1章的习题 列表 ! :)
    如何创建 linux 下的计划任务运行 php 文件?
    c 的开篇(自学 c 语言)
    一连串问题,都和.net framework有关
    信号与信号量的区别[转]
    永久设置SecureCRT的背景色和文字颜色方案[转]
    do...while(0)的妙用 【转】
    给Ubuntu软件升级命令 [转]
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15087093.html
Copyright © 2011-2022 走看看