【LeetCode】【算法】240. 搜索二维矩阵II

LeetCode 240. 搜索二维矩阵II

题目描述

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

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

思路

思路:K神真强啊240.搜索二维矩阵II(贪心,清晰图解)

  1. K神的思路实际上就是将矩阵转45°,将矩阵最下边的值作为flag,不断判断flag与target的关系,不断贪心地进行移动,直到找到target值或者flag移动到target为止。因为数组严格满足从左到右升序、从上到下升序的性质,我自己写时候的想法就是通过一堆if-else语句来挪动指针,非常低效,而且超时了(我没有在本地验证自己的代码,不清楚正确性)
  2. 逆时针旋转45度之后,满足这样一种情况:
    假如flag>target,则target一定在flag所在行的上方,即flag在原矩阵中的 "行"可以被消除(j++)
    假如flag<target,则target一定在flag所在列的右方,即flag在原矩阵中的"列"可以被消除(i--)
    通过这样的形式对flag进行一个缩放

代码

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int i = matrix.length - 1, j = 0;
        while (i >= 0 && j < matrix[0].length) {
            if (matrix[i][j] > target) i--;
            else if (matrix[i][j] < target) j++;
            else return true; // ==的情况
        }
        return false;
    }
}

自己写的垃圾。。。

java 复制代码
public boolean searchMatrix2(int[][] matrix, int target) {
    int i = 0, j = 0;
    while (i < matrix.length && j < matrix[0].length) {
        if (matrix[i][j] == target) return true;
        if (matrix[i][j + 1] < target){
            j++;
        } else if (matrix[i][j + 1] > target && matrix[i + 1][j] < target) {
            i++;
            continue;
        } else if (matrix[i][j + 1] > target && matrix[i + 1][j] > target) {
            i++;
            j = 0;
        }
        if (j == matrix[0].length) {
            i++;
            j = 0;
        }
    }
    return false;
}
相关推荐
东方芷兰4 小时前
Leetcode 刷题记录 21 —— 技巧
java·算法·leetcode·职场和发展·github·idea
kyle~4 小时前
排序---选择排序(Selection Sort)
java·算法·排序算法
编码浪子7 小时前
趣味学RUST基础篇(智能指针_结束)
开发语言·算法·rust
爱编程的化学家8 小时前
代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和
数据结构·c++·算法·leetcode·双指针·哈希
闲人编程10 小时前
图像去雾算法:从物理模型到深度学习实现
图像处理·人工智能·python·深度学习·算法·计算机视觉·去雾
咔咔学姐kk10 小时前
大模型微调技术宝典:Transformer架构,从小白到专家
人工智能·深度学习·学习·算法·transformer
haogexiaole12 小时前
Dijkstra 算法
算法
papership13 小时前
【入门级-算法-6、排序算法: 插入排序】
数据结构·算法·排序算法
HAH-HAH13 小时前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
hweiyu0014 小时前
C++设计模式,高级开发,算法原理实战,系统设计与实战(视频教程)
c++·算法·设计模式