【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

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c