【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

相关文章

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm