算法小白的进阶之路(力扣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 = 5
n = 5
ops = [[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 = 2
n = 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 = 2
n = 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 = 1
n = 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技术可以自动处理大量的图像和视频数据,从而提高工作效率和准确性。…...
Animate软件基础:关于补间动画中的图层
Animate 文档中的每一个场景都可以包含任意数量的时间轴图层。使用图层和图层文件夹可组织动画序列的内容和分隔动画对象。在图层和文件夹中组织它们可防止它们在重叠时相互擦除、连接或分段。若要创建一次包含多个元件或文本字段的补间移动的动画,请将每个对象放置…...
mac|安装hashcat(压缩包密码p解)
一、安装Macports(如果有brew就不用这一步) 根据官网文档:The MacPorts Project -- Download & Installation,安装步骤如下 1、下载MacPorts,这里我用的是tar.gz ,可以通过keka(keka安装在…...
【保姆级系列:锐捷模拟器的下载安装使用全套教程】
保姆级系列:锐捷模拟器的下载安装使用全套教程 1.介绍2.下载3.安装4.实践教程5.验证 1.介绍 锐捷目前可以通过EVE-NG来模拟自己家的路由器,交换机,防火墙。实现方式是把自己家的镜像导入到EVE-ng里面来运行。下面主要就是介绍如何下载镜像和…...
virtualbox7安装centos7.9配置静态ip
1.背景 我大概在一年之前安装virtualbox7centos7.9的环境,但看视频说用vagrant启动的窗口可以不用第三方工具(比如xshell、secure等)连接centos7.9,于是尝鲜试了下还可以,导致系统文件格式是vmdk了(网上有vmdk转vdi的方法…...
结构型设计模式:桥接/组合/装饰/外观/享元
结构型设计模式:适配器/代理 (qq.com)...
vLLM初识(一)
vLLM初识(一) 前言 在LLM推理优化——KV Cache篇(百倍提速)中,我们已经介绍了KV Cache技术的原理,从中我们可以知道,KV Cache本质是空间换时间的技术,对于大型模型和长序列…...
【Apache Doris】周FAQ集锦:第 18 期
【Apache Doris】周FAQ集锦:第 18 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…...
docker部署可执行的jar
1.将项目打包,上传到服务器的指定目录 2.在该目录下创建Dockerfile文件 3.Dockerfile写入如下指令 # 基于哪个镜像 FROM java:8 # 拷贝文件到容器,也可以直接写成ADD xxxxx.jar /app.jar ADD springboot-file-0.0.1.jar file.jar RUN bash -c touch /…...
OpenCV||超详细的图像处理模块
一、颜色变换cvtColor dst cv2.cvtColor(src, code[, dstCn[, dst]]) src: 输入图像,即要进行颜色空间转换的原始图像。code: 转换代码,指定要执行的颜色空间转换类型。这是一个必需的参数,决定了源颜色空间到目标颜色空间的转换方式。dst…...
java面向对象期末总结
子类父类方法执行顺序?多态中和子类打印不一样; 子类在实现父类方法的时候没有用super关键字进行调用也会先执行父类的构造方法吗? 是的,当子类实例化时,先执行父类的构造方法,再执行子类的构造方法。即使在…...
wordpress 4./发布信息的免费平台
数据库里面,没有这个sys_Manager的表。所以报这个错误, 还有就是上下文里面,要添加的。 要不然也报错...
wordpress 主页模版/长春seo结算
在开始之前,先回顾一下 jsp 和 servlet,jsp 和 servlet 本质是一样的,因为 jsp 最终必须编译成 servlet 才能运行。 因为 jsp 的那些标签 jvm 是无法直接运行的,必须经过编译成 java,才能够发挥它的作用。 创建步骤&am…...
天津 网站建设/个人域名注册流程
一种方法是按名字和姓氏分组,然后反转分组以获得单个ID.事先kursort输入,以确保您获得最低的ID.krsort($input);//groupforeach ($input as $id > $person) {// overwrite the id each time, but since the input is sorted by id in descending order,// the last one will…...
b站免费视频广告/想在百度上推广怎么做
本文跟那些长篇大论教你入门的文章大大不同!! 你读了这些文章,对于小白来讲,原理既难又枯燥,读了等于没读,一样不会用。 这里没有枯燥的理论,没有看不懂的术语,因为这些我也不懂&a…...
网店 网站建设策划书/制作网页的流程
Mac终端启动Sublime编辑器创建快捷方式修改命令名命令执行流程图注意创建快捷方式 使用软连接(快捷方式)将Sublime提供的命令行工具直接连接到/usr/local/bin/这个路径下。将/usr/local/bin/subl连接到Mac下的sublime应用提供的命令行工具subl。 ln -s…...
linux下做网站/seo是什么化学名称
1.要测试的类 2.单元测试类...