【Leetcode题单】(01 数组篇)刷题关键点总结04【二维数组及滚动数组】

2023-12-04 13:52

本文主要是介绍【Leetcode题单】(01 数组篇)刷题关键点总结04【二维数组及滚动数组】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Leetcode题单】(01 数组篇)刷题关键点总结04【二维数组及滚动数组】(5题)

  • 二维数组及滚动数组
    • 118. 杨辉三角 Easy
    • 119. 杨辉三角 II Easy
    • 661. 图片平滑器 Easy
    • 598. 范围求和 II Easy
    • 419. 甲板上的战舰 Medium

大家好,这里是新开的LeetCode刷题系列,以后尽量一天更新一个小章节。此系列应超过400题。
数组篇04《二维数组及滚动数组》,共5道题,4简单题1中等题。
注意看重点部分,总结起来是这一类题的规律。

二维数组及滚动数组

118. 杨辉三角 Easy

118. 杨辉三角
在这里插入图片描述

    public List<List<Integer>> generate(int numRows) {List<List<Integer>> list = new ArrayList<List<Integer>>();for(int i = 0; i < numRows; i++){List<Integer> row = new ArrayList<Integer>();for(int j = 0; j < i + 1; j++){if(j == 0 || j == i){row.add(1);} else {row.add(list.get(i - 1).get(j - 1) + list.get(i - 1).get(j));}}list.add(row);}return list;}

重点

  • List的嵌套使用
  • 内层循环的设计
  • List的add()get()方法

119. 杨辉三角 II Easy

119. 杨辉三角 II

此题内含数学公式推导
在这里插入图片描述

    public List<Integer> getRow(int rowIndex) {List<Integer> row = new ArrayList<Integer>();row.add(1);for(int i = 1; i <= rowIndex; i++){row.add((int) ((long)row.get(i - 1) * (rowIndex - i + 1) / i));}return row;}

重点

  • List的使用
  • 循环中 i 的初始值设为 1 ,方便进行操作
  • 为防止数据溢出,设为 long 后改为 int

661. 图片平滑器 Easy

661. 图片平滑器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    public int[][] imageSmoother(int[][] img) {int m = img.length, n = img[0].length;int[][] ans = new int[m][n];for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){int count = 0, sum = 0;for(int x  = i - 1; x <= i + 1; x++){for(int y = j - 1; y <= j + 1; y++){if(x >= 0 && x < m && y >= 0 && y < n){count++;sum += img[x][y];}}}ans[i][j] = sum / count;}}return ans;}

重点

  • 内两层循环,界定9个数的范围,确定在数组内部,则相加计算
  • 设定count值,计算范围内数字数
  • int 类型本身的除法就是向下取整

598. 范围求和 II Easy

598. 范围求和 II
在这里插入图片描述

    public int maxCount(int m, int n, int[][] ops) {int len = ops.length;int minM = m, minN = n;for(int i = 0; i < len; i++){minM = Math.min(minM, ops[i][0]);minN = Math.min(minN, ops[i][1]);}return minM * minN;}

重点

  • Math.min()的使用
  • 最小值的初始值设置
  • 问题转换为最小的option[i][0]与最小的option[i][1]之积

419. 甲板上的战舰 Medium

419. 甲板上的战舰
在这里插入图片描述
在这里插入图片描述
遍历法

    public int countBattleships(char[][] board) {int row = board.length;int col = board[0].length;int ans = 0;for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(board[i][j] == 'X'){board[i][j] = '.';for(int k = j + 1; k < col && board[i][k] == 'X'; k++){board[i][k] = '.';}for(int k = i + 1; k < row && board[k][j] == 'X'; k++){board[k][j] = '.';}ans++;}}}return ans;}

起点法

    public int countBattleships(char[][] board) {int row = board.length;int col = board[0].length;int ans = 0;for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(board[i][j] == 'X'){if(i > 0 && board[i-1][j] == 'X'){continue;}if(j > 0 && board[i][j-1] == 'X'){continue;}ans++;}}}return ans;}

重点

  • 遍历法:避免重复计数
  • 起点法:只计算起点数量
  • 问题简化:continue 的用法,避免重复计数,则置空

这个系列希望能够帮助大家**
提高刷题效率**,发现系列算法题目的常规思路,更快a题,速通Leetcode
b站【软件柠檬】以后会不定期分享计算机领域基础知识,求职干货,为大家助力实习和春秋招offer,
❤️这里是 软件柠檬, 让我们一起学习进步~❤️

这篇关于【Leetcode题单】(01 数组篇)刷题关键点总结04【二维数组及滚动数组】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/453696

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys