【LeetCode 热题 100】(六)矩阵

力扣热题100刷题笔记[python] 力扣100刷题题解 阅读详情

73. 矩阵置零

class Solution {
    public void setZeroes(int[][] matrix) {
        int row_length = matrix.length;
        int col_length = matrix[0].length;

        boolean[] row = new boolean[row_length];
        boolean[] col = new boolean[col_length];
        

        for (int i = 0; i < row_length; i++) {
            for (int j = 0; j < col_length; j++) {
                if(matrix[i][j] == 0){
                    row[i] = true;
                    col[j] = true;
                }
            }
        }
        for (int i = 0; i < row_length; i++) {
            for (int j = 0; j < col_length; j++) {
                if(row[i]== true || col[j] == true){
                    matrix[i][j] = 0;
                }
            }
        }


    }
}       

解题思路描述

这段代码实现了 “矩阵置零” 问题。给定一个 m x n 矩阵,如果某个元素为 0,则将其所在行和列的所有元素都设为 0。代码需要满足原地修改的要求(不返回新矩阵)。

核心思想:标记法

使用两个标记数组分别记录哪些行和列需要置零:

  1. 行标记数组 row[]:记录包含 0 的行
  2. 列标记数组 col[]:记录包含 0 的列
    通过两次遍历完成操作:第一次扫描标记,第二次根据标记置零。
步骤详解
  1. 初始化标记数组:

    • row[length]:布尔数组,长度 = 矩阵行数
    • col[length]:布尔数组,长度 = 矩阵列数
    • 初始值均为 false,表示暂无需要置零的行列
  2. 第一次遍历:标记需要置零的行列(时间复杂度 O(m*n))

    • 遍历每个元素 matrix[i][j]
    • 当元素值为 0 时:
      • 标记行:row[i] = true
      • 标记列:col[j] = true
    • 关键点:此时不修改矩阵值,避免影响后续标记
  3. 第二次遍历:执行置零操作(时间复杂度 O(m*n))

    • 再次遍历每个元素 matrix[i][j]
    • 若当前行被标记 (row[i] == true) 或当前列被标记 (col[j] == true)
    • 将元素置零:matrix[i][j] = 0
为什么有效?
  • 原地修改:直接操作输入矩阵,不返回新矩阵
  • 避免覆盖问题:先完成全部标记再修改,确保不会遗漏或误标记
  • 时间复杂度:O(m*n) 两次完整遍历矩阵
  • 空间复杂度:O(m+n) 使用两个额外标记数组
示例演算

以 3x3 矩阵为例:

初始矩阵:
[1, 2, 3]
[4, 0, 6]
[7, 8, 9]

步骤1:标记行列
  在(1,1)发现0 → 标记 row[1]=true, col[1]=true

步骤2:根据标记置零
  row[1]=true → 将第1行(索引1)全置零:[4,0,6]→[0,0,0]
  col[1]=true → 将第1列(索引1)全置零:
      [2]→0, [0]→0 (已置零), [8]→0

最终结果:
[1, 0, 3]
[0, 0, 0]
[7, 0, 9]
优化方向

虽然当前代码清晰易懂,但空间复杂度可优化至 O(1):

  • 用矩阵第一行和第一列代替标记数组
  • 额外两个变量标记第一行/列是否需要置零
    但当前版本更易理解,适合展示核心思路。

54. 螺旋矩阵

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> order = new ArrayList<Integer>();
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return order;
        }
        int rows = matrix.length;
        int cols = matrix[0].length;

        // 四个角
        int left = 0, right = cols - 1, top = 0, bottom = rows - 1;
        
        while (left <= right && top <= bottom){
            
            // 1.从左向右
            for (int column = left; column <= right; column++) {
                order.add(matrix[top][column]);
            }

            // 2.从上往下
            for (int row = top+1; row <= bottom; row++){
                order.add(matrix[row][right]);
            }


            if(left < right && top< bottom){
                // 3.从右往左
                for (int column = right-1; column > left; column--) {
                    order.add(matrix[bottom][column]);
                }
                // 4.从下往上
                for (int row = bottom; row > top; row--){
                    order.add(matrix[row][left]);
                }
            }
            left++;
            right--;
            top++;
            bottom--;
        }
        return order;

    }
}

解题思路描述

这段代码实现了 “螺旋矩阵” 问题。给定一个 m x n 的矩阵,要求按照顺时针螺旋顺序返回所有元素。代码的核心思想是模拟螺旋遍历过程,通过控制边界完成遍历。

核心思想:边界收缩法

使用四个变量标记当前遍历的边界:

  • left:左边界列索引
  • right:右边界列索引
  • top:上边界行索引
  • bottom:下边界行索引
    每完成一圈螺旋遍历,就向内收缩边界,直到遍历完所有元素。
步骤详解
  1. 初始化边界:

    • left = 0(最左列)
    • right = cols - 1(最右列)
    • top = 0(最上行)
    • bottom = rows - 1(最下行)
  2. 螺旋遍历(循环条件:left <= right && top <= bottom):

    • 从左到右(上边界):
      • 遍历 top 行,从 left 到 right
      • 示例:3x3 矩阵中,遍历第0行的 [0][0], [0][1], [0][2]
    • 从上到下(右边界):
      • 遍历 right 列,从 top+1 到 bottom
      • 示例:3x3 矩阵中,遍历第2列的 [1][2], [2][2]
    • 从右到左(下边界,需满足内圈条件):
      • 仅当 left < right && top < bottom 时执行(防止单行/单列重复遍历)
      • 遍历 bottom 行,从 right-1 到 left+1
      • 示例:3x3 矩阵中,遍历第2行的 [2][1]
    • 从下到上(左边界,需满足内圈条件):
      • 遍历 left 列,从 bottom 到 top+1
      • 示例:3x3 矩阵中,遍历第0列的 [2][0], [1][0]
  3. 边界收缩:

    • 每完成一圈:left++, right--, top++, bottom--
    • 示例:3x3 矩阵第一圈后,边界变为 left=1, right=1, top=1, bottom=1
  4. 内圈处理:

    • 当边界收缩后仍满足 left <= right && top <= bottom 时继续遍历
    • 示例:3x3 矩阵内圈只剩 [1][1] 元素
关键点解析
  1. 内圈条件判断:

    • 从右到左和从下到上的遍历需要满足 left < right && top < bottom
    • 避免单行/单列时的重复遍历(如 3x1 矩阵)
  2. 边界处理顺序:

    • 固定顺序:左→右、上→下、右→左、下→上
    • 每次只处理当前边界的最外层
  3. 终止条件:

    • 当左边界越过右边界或上边界越过下边界时结束
示例演算(3x3 矩阵)
初始矩阵:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

遍历过程:
1. 左→右: [0][0]=1, [0][1]=2, [0][2]=3
2. 上→下: [1][2]=6, [2][2]=9
3. 右→左(内圈): [2][1]=8
4. 下→上(内圈): [2][0]=7, [1][0]=4
5. 边界收缩:left=1, right=1, top=1, bottom=1
6. 左→右(内圈): [1][1]=5

结果:[1,2,3,6,9,8,7,4,5]
复杂度分析
  • 时间复杂度:O(m×n)
    每个元素恰好被访问一次
  • 空间复杂度:O(1)(不计输出列表)
    仅使用固定数量的边界变量
特殊矩阵处理
  • 单行矩阵:仅执行左→右遍历
  • 单列矩阵:执行左→右和上→下遍历
  • 空矩阵:开始时的空值检查直接返回空列表

这个解法通过精确控制边界移动和遍历方向,高效地实现了螺旋顺序遍历,是处理此类问题的经典方法。

48. 旋转图像

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int[][] matrix_new = new int[n][n];

        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n-1-i] = matrix[i][j];
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

解题思路描述:旋转图像(顺时针90度)

方法1:使用额外空间(O(n²)空间复杂度)

核心思路:创建一个新矩阵,按照旋转规律映射元素位置,最后复制回原矩阵。

解题步骤:

  1. 创建新矩阵:

    int n = matrix.length;
    int[][] matrix_new = new int[n][n]; // 创建与输入矩阵相同大小的新矩阵
    
  2. 元素位置映射:

    • 旋转规律:原矩阵中 [i][j] 位置的元素,在旋转后应位于 [j][n-1-i]
    • 映射实现:
      for (int i = 0; i < n; ++i) {
          for (int j = 0; j < n; ++j) {
              matrix_new[j][n-1-i] = matrix[i][j];
          }
      }
      
  3. 复制回原矩阵:

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            matrix[i][j] = matrix_new[i][j];
        }
    }
    

关键点解析:

  • 空间复杂度:O(n²)(需要额外n×n空间存储新矩阵)
  • 正确性保证:不修改原矩阵数据,避免覆盖问题
  • 时间复杂度:O(n²)(两次完整遍历)

示例演算(2×2矩阵):

原矩阵:       旋转后:
[1,2]         [3,1]
[3,4]  →→→→   [4,2]

映射过程:
1→[0][0] → 新位置[0][1]
2→[0][1] → 新位置[1][1]
3→[1][0] → 新位置[0][0]
4→[1][1] → 新位置[1][0]
方法2:原地旋转(O(1)空间复杂度)

核心思路:通过两次翻转操作实现原地旋转,无需额外空间。

解题步骤:

  1. 主对角线翻转(矩阵转置):

    • 交换元素位置:matrix[i][j] ↔ matrix[j][i]
    • 关键:只需遍历上三角区域,避免重复交换
  2. 水平翻转(逐行逆序):

    • 交换元素位置:matrix[i][j] ↔ matrix[i][n-1-j]
    • 关键:每行只需遍历前半部分

完整代码实现:

public void rotate(int[][] matrix) {
    int n = matrix.length;
    
    // 1. 主对角线翻转(转置)
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) { // 注意:j从i开始
            int temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
    
    // 2. 水平翻转(逐行逆序)
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n/2; j++) { // 只需遍历半行
            int temp = matrix[i][j];
            matrix[i][j] = matrix[i][n-1-j];
            matrix[i][n-1-j] = temp;
        }
    }
}

关键点解析:

  1. 旋转的数学本质:

    顺时针90° = 转置 + 水平翻转
    逆时针90° = 转置 + 垂直翻转
    
  2. 遍历范围优化:

    • 转置时:只遍历上三角区(j从i开始),避免重复交换
    • 翻转时:每行遍历前半部分(j < n/2)
  3. 空间复杂度:O(1)(仅使用常数临时变量)

示例演算(3×3矩阵):

原矩阵:
[1,2,3]
[4,5,6]
[7,8,9]

步骤1:转置(主对角线翻转):
[1,4,7]
[2,5,8]
[3,6,9]

步骤2:水平翻转(逐行逆序):
[7,4,1]  ← 第一行:1和7交换,4不动
[8,5,2]  ← 第二行:2和8交换
[9,6,3]  ← 第三行:3和9交换(实际操作时按行翻转)

最终结果(顺时针旋转90°):
[7,4,1]
[8,5,2]
[9,6,3]

两种方法对比:

特性方法1(额外空间)方法2(原地旋转)
空间复杂度O(n²)O(1)
可读性直观易懂需要理解旋转数学原理
适用场景内存空间充足时内存受限环境
修改方式创建新矩阵直接修改输入矩阵
时间复杂度O(n²)(两次遍历)O(n²)(两次遍历)

方法2通过巧妙的两次翻转操作,在不使用额外空间的情况下高效实现了矩阵旋转,是解决此类问题的经典原地算法。

力扣热题 100:动态规划专题经典题解析 在力扣(LeetCode)平台上,动态规划相关的题目是算法面试和练习中的重要部分。今天,我们就来详细解析动态规划专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。我们可以将问题转化为背包问题,判断是否存在一个子集的和等于总和的一半。我们可以使用动态规划来记录字符串的每个位置是否可以被拆分。我们可以使用动态规划来记录每个房子能抢劫到的最大金额。我们可以使用动态规划来记录每个数的最少完全平方数数量。我们可以使用动态规划来记录到达每个台阶的方法数。我们可以使用动态规划来记录每个金额的最少硬币数。 阅读详情

相关推荐

LeetCode 热题 100 回顾

力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 9万+

LeetCode 热题100(六)【矩阵】

5.请注意在第3、4步中,均多加了一个判断,这是因为当遍历n圈后(n>=0),如果矩阵内剩下的元素是一个行向量或者列向量,最后的输出结果会有问题,请自己推导一下第3、4步中不多加一个判断,对于以下几个矩阵,输出是否会正确。矩阵的左、右、上、下边界分别为left、right、top、bottom,只要满足left <= right && top <= bottom即可进行遍历。3.从右往左遍历,遍历完之后,bottom--2.从上往下遍历,遍历完之后,right--1.从左往右遍历,遍历完之后,top++

jrrz0828的博客 1095

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南)

本文详细介绍了从Design Compiler(DC)过渡到DC Topographical(DCT)和DC Graphical(DCG)的完整操作框架,特别针对DEF文件处理提供避坑方案。通过环境准备、工具升级、DEF文件处理、DCG综合配置等步骤,帮助开发者高效应对28nm以下工艺节点的物理感知综合挑战,显著提升时序收敛效率。

weixin_27966471的博客 381

《LeetCode 热题 100》整整 100 题量大管饱题解套餐 上

《LeetCode 热题 100》整整 100 题量大管饱题解套餐

Lenyiin 3590

KMS服务器一键部署与激活实战指南

本文详细介绍了KMS服务器的一键部署与激活实战指南,包括快速入门、安装步骤、服务管理技巧及常见问题排查。特别针对Windows和Mac用户提供了Office激活的具体操作步骤,并分享了高级配置与优化方案,帮助IT管理员高效管理批量授权激活。

weixin_29305313的博客 461

CH340以及CH系列USB转串口驱动下载

在之前使用USB转串口时,很多时候大家可能会不知道去哪下载驱动,然后百度随便下载一个,但往往鱼龙混杂且版本不一,所以今天特意整理一下CH340驱动以及CH系列的官方驱动下载地址,方便大家进行下载也方便自己后期查找,所有链接皆指向官方下载链接,每次下载都可获取官方当前最新驱动。 CH340/CH341 Windows驱动下载链接:CH341SER.EXE下载链接 Linux驱动下载链接:CH341SER_LINUX.ZIP下载链接 Andr...

OIDCAT的博客 4万+

力扣热题 100:图论专题经典题解析

给定一个二维网格,其中 ‘0’ 表示空单元格,‘1’ 表示新鲜橘子,‘2’ 表示腐烂橘子。每分钟,腐烂的橘子会使其上下左右的新鲜橘子腐烂。我们可以遍历网格中的每个元素,当遇到陆地时,将其标记为已访问,并递归或迭代地访问其相邻的陆地,直到所有相连的陆地都被访问过。我们可以将所有腐烂的橘子作为初始节点,同时进行 BFS,逐层腐烂相邻的新鲜橘子。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。给定一个由 ‘0’(水)和 ‘1’(陆地)组成的二维网格,计算其中岛屿的数量。

m0_72686196的博客 1557

在游戏开发中如何使用Unity3D引擎开发麻将游戏

总体来说使用Unity3D引擎开发麻将游戏需要开发人员熟练掌握Unity3D的各种功能和API,并且需要深入了解麻将游戏的规则和背景,以便实现一个质量高、玩法丰富的游戏。在测试的过程中我们需要检查游戏是否符合规则,保证游戏逻辑的正确性,并检查游戏的UI是否和设计图一致,保证游戏的可玩性。Unity3D引擎是一个高度集成的游戏开发工具,可以为开发人员提供很多强大的工具和功能,包括3D建模、物理模拟、粒子系统、动画等等,在游戏开发中可以提高开发效率和游戏质量。在开始开发之前我们需要明确游戏的需求和功能。

a272857154的专栏 1891

【完结】LeetCode 热题 HOT 100分类+题解+代码详尽指南

算法,被誉为程序员的内功心法,其重要性不言而喻。不仅是技术面试中的关键考察点,帮助无数开发者赢得心仪的工作机会,更是提升逻辑思考与核心编程技能的磨刀石。作为一名长期活跃于LeetCode平台的用户,我在此分享一些心得与体会,为正在算法修炼道路上探索的你提供指引,避免不必要的弯路,加速成长的步伐。以下是【完结】LeetCode 热题 HOT 100分类+题解+代码详尽指南 链接,只需关注这一篇即可享受完结版 LeetCode 热题 100,每个主题均有详尽的代码注释及解题思路~

weixin_43298211的博客 3万+

android广告SDK原理详解(附源码)

广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这

rmcgogo的博客 1万+

告别BAPI!深入SAP S/4HANA BP框架:cl_md_bp_maintain维护客户主数据的正确姿势与性能优化

本文深入解析SAP S/4HANA中cl_md_bp_maintain框架的高效实践与架构设计,对比传统BAPI方式,展示其在业务伙伴(BP)主数据维护中的性能优势与现代化特性。通过详细代码示例和性能测试数据,揭示如何利用该框架实现批量处理、集中校验及智能错误恢复,助力企业从ECC向S/4HANA平滑迁移。

weixin_30596735的博客 358

力扣热题 100:技巧专题经典题解析

异或运算的性质是:一个数异或自己为 0,一个数异或 0 为自己。因此,遍历数组,将所有元素异或在一起,最终结果就是只出现一次的数字。我们可以维护一个候选元素和其计数,遍历数组,如果当前元素与候选元素相同,则计数加 1,否则计数减 1。给定一个包含红色、白色和蓝色的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色的顺序排列。遍历数组,根据元素的值交换到相应的位置。给定一个包含 n + 1 个整数的数组,其中每个元素在 1 到 n 之间,至少存在一个重复元素。找到那个只出现一次的元素。

m0_72686196的博客 1764

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1504

LeetCode热题100plus

(简单)给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。方法一(自己想到):暴力枚举,两次循环遍历所有相加的情况。

qq_43751506的博客 3670

26. Fabric2.2 司法存证的智能合约分析

有很多同学反馈 Fabric 智能合约读起来比较费劲,对于新手不友好看不懂,这里选择一个司法存证的智能合约,阅读、分析智能合约基础框架与核心流程代码,培养大家智能合约编写的方法论。

菜鸟的博客 1340

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

力扣热题 100:栈专题经典题解析

在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。今天,我们就来详细解析栈专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。我们可以使用两个栈,一个用于存储所有元素,另一个用于存储最小值。解释:最大面积的矩形由高度为 5 的柱子和其右侧的柱子形成,宽度为 2,面积为 5 * 2 = 10。我们可以使用两个栈,一个用于存储字符,另一个用于存储数字。给定一个经过编码的字符串,返回其解码后的字符串。,表示一组柱状图的高度,计算能够形成的矩形的最大面积。

m0_72686196的博客 1386

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣热题100(附刷题表版)

不仅方便查看题目,并且,在完成题目后,,我放在了结尾,大家自取,直接复制粘贴到。2. 字母异位词分组(中等)3. 最长连续序列(中等)1. 两数之和 (简单)时做记录,整理了下面。

2301_79966297的博客 2237

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

力扣热题 100:二分查找专题经典题解析

给定一个按非递减顺序排列的整数数组nums和一个目标值target,找出目标值在数组中的第一个和最后一个位置。如果目标值不存在,返回[-1, -1]。

m0_72686196的博客 1049

LeetCode 热题 HOT 100 题解(仅记录解题思路)

由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。指针p1在头结点处,指针p2在头结点的next处,然后p1每次移动1格,p2则走2步,若在其中一个进入null之前两者指向同一结点,则代表有环。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

a131529的博客 1万+

力扣热题100再刷

本文摘要总结了LeetCode上160道经典算法题解,涵盖数据结构与算法核心知识点。主要内容包括: 数据结构:链表(相交/回文/反转)、二叉树(翻转/遍历/直径)、栈(最小栈/有效括号)、堆(前K高频)、字典树、并查集等。 算法思想: 动态规划:打家劫舍系列、股票买卖、编辑距离、路径问题等典型DP场景 双指针:接雨水、盛水容器、移动零等高效解法 回溯搜索:组合总和、子集生成、括号生成等模板应用 贪心算法:跳跃游戏、任务调度等最优策略 分治递归:二叉树问题、归并排序等分治思路 高频题型: 数组操作(旋转图像、

fancyxiaoxiao的博客 1033

leetcode热题HOT100汇总——java题解已完结撒花

为了学习本文捋顺leetcode热题HOT100的汇总 方便自己秋招刷题 仅作刷题笔记使用 感兴趣的小伙伴点一个赞吧。

qq_41810415的博客 9413

力扣热题 100:哈希专题三道题详细解析(JAVA)

今天,我们就来详细解析热题 100 中与哈希相关的三道题,帮助大家更好地理解解题思路和技巧。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。这道题是力扣上的经典入门题,主要考察哈希表的应用。我们可以使用哈希表来存储数组中的元素及其下标,然后遍历数组,对于每个元素,检查。我们可以将每个字符串排序后作为哈希表的键,将变位词作为哈希表的值。我们可以使用哈希表来存储数组中的元素及其连续序列的长度。,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。

m0_72686196的博客 1620

LeetCode 热题100

LeetCode 热题100

牛牛博士博客 1371

力扣热题 100:矩阵专题四道题详细解析(JAVA)

今天,我们就来详细解析热题 100 中与矩阵相关的四道题,帮助大家更好地理解解题思路和技巧。以上就是力扣热题 100 中与矩阵相关的四道题的详细解析,希望对大家有所帮助。我们可以从矩阵的右上角开始搜索,根据目标值与当前元素的大小关系,决定向左还是向下移动。我们可以先将矩阵转置,然后将每一行反转,从而实现顺时针旋转 90 度。的矩阵,每一行和每一列都按升序排列。解释:矩阵中有一个元素为 0,将其所在的行和列的所有元素都设置为 0。的矩阵,返回以螺旋顺序遍历矩阵的结果。的矩阵,将其顺时针旋转 90 度。

m0_72686196的博客 1264

LeetCode热题100(Java)(6)矩阵

如图所示,第一张为原数组,由于第一行有0,所以我们要用一个常量标记第一行,最终要全部置为0,然后将中间位置的0分别将其对应的行列的第一个位置标为0,这样在遍历行的时候,把行对应的所有列标记为0,遍历列的时候,把列对应的所有行标记为0,最后再看常量是否标记第一行和第一列,即可完成整个矩阵的置零操作。当然,我们可以对其进行优化,创建两个数组,在遍历原矩阵的过程中,分别将遍历到的0位置的横纵坐标分别存入对应数组中,由于可能会有相同的横纵坐标,所以我们这里用HashSet去重,可以适当的优化时间效率。

xin_nai的博客 615

力扣热题 100:堆专题经典题解析

以上就是力扣热题 100 中与堆相关的经典题目的详细解析,希望对大家有所帮助。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。在力扣(LeetCode)平台上,堆相关的题目是算法面试和练习中的重要部分。今天,我们就来详细解析堆专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。我们可以使用一个哈希表来统计每个元素的频率,然后使用一个大小为。我们可以使用两个堆来维护数据流的中位数。设计一个数据结构,能够高效地添加整数和找到当前所有元素的中位数。

m0_72686196的博客 1321
上一篇: 【LeetCode 热题 100】(五)普通数组
下一篇: 【LeetCode 热题 100】(七)链表
夜斗小神社
博客等级 码龄7年 3718粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值