算法小白的进阶之路(力扣9~12)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

前言
本栏目将记录博主暑假从0开始刷力扣的算法题,每一条题目我都会把知识点抽丝剥茧地进行分析,以便大家更好的理解和学习,话不多说,肝!
| 序号 | 标题 | 力扣序号 |
| 9 | 重塑矩阵 | 566 |
| 10 | 区间加法 | 598 |
| 11 | 三个数最大乘积 | 628 |
| 12 | 错误的集合 | 645 |
1.重塑矩阵
题目:
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:

输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]]
示例 2:
输入:mat = [[1,2],[3,4]], r = 2, c = 4 输出:[[1,2],[3,4]]
解题思路:
-
检查维度兼容性:首先,需要确保原始矩阵
nums的元素总数(即M * N)等于目标矩阵res的元素总数(即r * c)。如果两者不等,说明无法按照要求重塑矩阵,因此直接返回原始矩阵。 -
创建目标矩阵:如果维度兼容,则创建一个新的二维数组
res,其大小为r x c,用于存储重塑后的矩阵。 -
遍历并填充目标矩阵:通过两层嵌套循环遍历原始矩阵
nums的每个元素。外层循环遍历原始矩阵的行(i从0到M-1),内层循环遍历列(j从0到N-1)。 -
更新目标矩阵的索引:在遍历过程中,使用两个变量
row和col来跟踪目标矩阵res的当前填充位置。每当col达到c(即目标矩阵的列数),说明已经填满了一行,此时将row增加1以移到下一行,并将col重置为0。这样,res[row][col]就能正确地指向目标矩阵的下一个填充位置。 -
填充元素:在每次内层循环中,将原始矩阵
nums的当前元素nums[i][j]赋值给目标矩阵res的对应位置res[row][col],然后递增col以指向下一个列位置。 -
返回结果:遍历完成后,返回填充好的目标矩阵
res。
int M = nums.length; // 获取原始矩阵的行数
int N = nums[0].length; // 假设原始矩阵不是空矩阵,获取其列数
if (M * N != r * c) { // 检查维度兼容性 return nums; // 如果维度不兼容,返回原始矩阵
}
int[][] res = new int[r][c]; // 创建一个新的二维数组,大小为r x c,用于存储重塑后的矩阵
int row = 0, col = 0; // 初始化目标矩阵的填充位置索引
for (int i = 0; i < M; i++) { // 外层循环遍历原始矩阵的行 for (int j = 0; j < N; j++) { // 内层循环遍历列 if (col == c) { // 如果已经填满了一行 row += 1; // 移到下一行 col = 0; // 重置列索引 } res[row][col] = nums[i][j]; // 将原始矩阵的元素填充到目标矩阵的对应位置 col += 1; // 移到下一列 }
}
return res; // 返回重塑后的矩阵
2.区间加法
题目:
给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。
在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。
示例 :

输入: m = 3, n = 3,ops = [[2,2],[3,3]] 输出: 4 解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
解题思路:
这道题其实不关心最大的值,而是关心次数,讲过小知识:在前端的知识里面,左上角为画面的默认值,所以重叠最多次。

这个问题实际上并不需要真正去模拟矩阵的加法操作或者构建一个真实的矩阵。关键在于理解操作数组 ops 对矩阵 M 的影响。每个操作 [ai, bi] 实际上是在说:“在矩阵的左上角 ai x bi 的子矩阵内的所有元素都应该加 1”。但是,由于所有元素初始都是 0,并且每个操作都是对整个子矩阵的加 1 操作,因此最终矩阵 M 的最大值将仅由操作数组 ops 中定义的最小 ai 和最小 bi 决定。
代码(Java)
class Solution { public int maxCount(int m, int n, int[][] ops) { // 遍历操作数组 for (int[] op : ops) { // 更新 m 为当前 m 和操作数组中的 ai 的最小值 m = Math.min(m, op[0]); // 更新 n 为当前 n 和操作数组中的 bi 的最小值 n = Math.min(n, op[1]); } // 返回最终矩阵中最大整数的个数,即 m * n return m * n; }
}
假设我们有以下输入:
- 矩阵的初始大小(虽然在这个问题中实际上并不重要,因为我们只关心操作数组):
m = 5, n = 5(即一个 5x5 的矩阵,但所有元素初始都是 0)。 - 操作数组
ops:[[2, 3], [4, 2], [1, 5]]。
现在,我们逐步执行代码:
-
初始化:
m = 5n = 5ops = [[2, 3], [4, 2], [1, 5]]
-
开始遍历操作数组:
第一步(处理第一个操作
[2, 3]):m = Math.min(5, 2);->m = 2(因为 2 是当前m和op[0]的最小值)。n = Math.min(5, 3);->n = 3(因为 3 是当前n和op[1]的最小值)。
此时:
m = 2n = 3
第二步(处理第二个操作
[4, 2]):m = Math.min(2, 4);->m = 2(因为 2 仍然是当前m和op[0]的最小值)。n = Math.min(3, 2);->n = 2(因为 2 是当前n和op[1]的最小值)。
此时:
m = 2n = 2
第三步(处理第三个操作
[1, 5]):m = Math.min(2, 1);->m = 1(因为 1 是当前m和op[0]的最小值)。n = Math.min(2, 5);->n = 2(因为 2 仍然是当前n和op[1]的最小值)。
此时:
m = 1n = 2
-
遍历结束,返回结果:
- 执行
return m * n;->return 1 * 2;->return 2;。
- 执行
3.三个数最大乘积
题目:
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 :
输入:nums = [1,2,3] 输出:6
解题思路:
如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。
如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。
代码(Java):
class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);int n = nums.length;return Math.max(nums[0] * nums[1] * nums[n - 1], nums[n - 3] * nums[n - 2] * nums[n - 1]);}
}
1. 数组中最小的两个数(nums[0]和nums[1])乘以最大的数(nums[n-1]), 这种情况适用于数组中有负数且负数的绝对值很大的情况,因为负数乘以负数会得到正数,可能使得乘积变得更大。
2. 数组中最大的三个数(nums[n-3]、nums[n-2]和nums[n-1])相乘。 这是最常见的情况,因为当数组中没有负数或者负数的绝对值不大时,直接取最大的三个数相乘即可得到最大乘积。
4.错误的集合
题目:
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums 代表了集合 S 发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 :
输入:nums = [1,2,2,4] 输出:[2,3]
解题思路:
使用「哈希表」统计每个元素出现次数,然后在 [1,n] 查询每个元素的出现次数。
在「哈希表」中出现 2 次的为重复元素,未在「哈希表」中出现的元素为缺失元素。
由于这里数的范围确定为 [1,n],我们可以使用数组来充当「哈希表」,以减少「哈希表」的哈希函数执行和冲突扩容的时间开销。
代码(Java)
class Solution {public int[] findErrorNums(int[] nums) {int n = nums.length;int[] cnts = new int[n + 1];for (int x : nums) cnts[x]++;int[] ans = new int[2];for (int i = 1; i <= n; i++) {if (cnts[i] == 0) ans[1] = i;if (cnts[i] == 2) ans[0] = i;}return ans;}
}
int[] nums = {1, 2, 3, 3, 5};
int[] cnts = new int[6]; // 长度为6,对应数字1到5 // 遍历nums数组
for (int x : nums) { cnts[x]++; // 对应索引位置上的计数加1
} // 遍历结束后,cnts数组的内容如下:
// cnts[0] = 0(没有数字对应索引0)
// cnts[1] = 1(数字1出现1次)
// cnts[2] = 1(数字2出现1次)
// cnts[3] = 2(数字3出现2次,即重复了)
// cnts[4] = 0(数字4没有出现,即缺失了)
// cnts[5] = 1(数字5出现1次)
❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
相关文章:
算法小白的进阶之路(力扣9~12)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
DOCKER容器中安装JDK1. 8 详细步骤
1.通过查找JDK8的远程镜像 docker search jdk 2.选择一个远程镜像下载到本地仓库 #拉取镜像 docker pull kdvolder/jdk8#查看镜像 docker images 可以看到REPOSITORY列下面出现了kdvolder/jdk8 3.在docker容器中运行jdk8的镜像 docker run -di --namejdk1.8 kdvolder/jdk…...
计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
1、用pycharm打开项目,一定要打开包含manage.py文件所在文件夹 2、配置解释器:建议使用Anaconda(Python 3.8(base)),低于3.8版本的,页面会不兼容 3、安装依赖库:打开pycharm的终端,输入: pip in…...
深度学习常见的卷积和注意力机制文章集锦(持续更新)
卷积 友好链接1 卷积原理:几种常用的卷积(标准卷积、深度卷积、组卷积、扩展卷积、反卷积) 友好链接2 一文看尽深度学习中的20种卷积(附源码整理和论文解读) 友好链接3 深度学习中组卷积(Group convolution)、深度卷积…...
如何在立创EDA的PCB电路板导入logo图案
1、首先制作好logo图案,一般为公司logo图标,如下图 2、打开立创EDA的PCB文件,如下图 3、将PCB的图层切换到丝印层: 4、然后选择EDA菜单栏的放置---图片: 5、进入后点击选择图片,将logo图片导入,…...
springboot集成canal
目录 一、打开mysql的binlog1.1 打开 MySQL 配置文件 my.cnf(通常位于 /etc/mysql/my.cnf 或 /etc/my.cnf)并添加或修改以下设置:1.2 重启mysql服务1.3 验证是否生效 二、 部署canal 服务端(docker)2.1 下载启动脚本(可…...
leetcode数论(2447. 最大公因数等于 K 的子数组数目)
前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的子数组中元素的最大公因数等于 k 的子数组数目。 子数组 是数组中一个连续的非空序列…...
实现数组扁平化的几种方式
目标: 实现数组扁平化[1,[2,[3,4,5]]] > [1,2,3,4,5] 我们有几种方法可以实现,分别为: 1、递归 function flatten(list){return list.reduce((tar, cur) > {if(Array.isArray(cur)){tar tar.concat(flatten(cur));} else {tar.push(cur);}return tar;}, []); } flatt…...
3D打印技术正悄然重塑模具工业格局
虽被誉为“工业之母”的模具在批量生产中仍占据核心地位,但3D打印以其“无模”直接成型的特性,在小批量、非标准化及复杂结构件制造领域展现出独特优势,随着技术和装备的不断发展,目前3D打印正逐渐向批量生产渗透,某品…...
深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战
文章目录 1. KMZ 文件与 KML 文件简介1.1 KMZ 文件1.2 KML 文件 2. Python 环境配置与依赖安装3. 代码实现详解3.1 查找 KMZ 文件3.2 解压 KMZ 文件3.3 解析 KML 文件3.4 可视化 KMZ 数据 4. 项目实战4.1. 数据采集4.2. 项目完整代码 5. 项目运行与结果展示6. 总结与展望 在处理…...
YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)
YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构) 本文介绍论文原理介绍网络代码多种yaml设置网络测试及实验结果<!-- 这里放入论文图片 -->  ;本文介绍 本文给大家带来的改进机制是结合MobileNetV4骨干网络,其中来自2024.5月发布的MobileNetV4…...
学习安卓开发遇到的问题
问题1:学习禁用与恢复按钮中: java代码报错:报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下:(实现功能在代码后面) package com.example.apptest;import static java.…...
数学建模--禁忌搜索
目录 算法基本原理 关键要素 应用实例 实现细节 python代码示例 总结 禁忌搜索算法在解决哪些具体类型的组合优化问题中最有效? 禁忌搜索算法的邻域结构设计有哪些最佳实践或案例研究? 如何动态更新禁忌表以提高禁忌搜索算法的效率和性能&#…...
LeetCode 第136场双周赛个人题解
Q1. 求出胜利玩家的数目 原题链接 Q1. 求出胜利玩家的数目 思路分析 直接模拟 时间复杂度:O(N) AC代码 class Solution { public:int winningPlayerCount(int n, vector<vector<int>>& pick) {unordered_map<int, unordered_map<int, …...
The operation was rejected by your operating system. code CERT_HAS_EXPIRED报错解决
各种报错,试了清缓存,使用管理员权限打开命令行工具,更新npm,都不好使 最终解决:删除 c:/user/admin/ .npmrc...
[Git][基本操作]详细讲解
目录 1.创建本地仓库2.配置 Git3.添加文件1.添加文件2.提交文件3.其他 && 说明 4.删除文件5.跟踪修改文件6.版本回退7.撤销修改0.前言1.未add2.已add,未commit3.已add,已commit 1.创建本地仓库 创建⼀个Git本地仓库:git init运行该命…...
springMVC中从Excel文件中导入导出数据
目录 1. 数据库展示2. 导入依赖3. 写方法3.1 导入数据3.2 导出数据 4. 效果5. 不足6. 参考链接 1. 数据库展示 2. 导入依赖 pom.xml <!--文件上传处理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>&…...
C++的STL简介(三)
目录 1.vector的模拟实现 1.1begin() 1.2end() 1.3打印信息 1.4 reserve() 1.5 size() 1.6 capacity() 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…...
BERT模型
BERT模型是由谷歌团队于2019年提出的 Encoder-only 的 语言模型,发表于NLP顶会ACL上。原文题目为:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》链接 在前大模型时代,BERT模型可以算是一个参数量比…...
举例说明计算机视觉(CV)技术的优势和挑战
计算机视觉(CV)技术是通过计算机模拟和处理图像与视频数据来模拟人类视觉的能力。它可以带来许多优势,也面临一些挑战。 优势: 自动化:CV技术可以自动处理大量的图像和视频数据,从而提高工作效率和准确性。…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

