【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

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义