- 博客(50)
- 收藏
- 关注
原创 LeetCode-547. 省份数量
是一组直接或间接相连的城市,组内不含其他没有相连的城市。个城市,其中一些彼此相连,另一些没有相连。表示二者不直接相连。
2025-04-02 14:54:41
347
原创 LeetCode-695. 岛屿的最大面积
答案不应该是 11,因为岛屿只能包含水平或垂直这四个方向上的 1。(代表土地) 构成的组合,这里的「相邻」要求两个。如果没有岛屿,则返回面积为。岛屿的面积是岛上值为。
2025-03-31 08:49:37
308
原创 LeetCode-75. 颜色分类
为了解决颜色排序问题,我们可以使用荷兰国旗问题的三指针法。该方法通过一次遍历数组,将元素分为三个部分:红色(0)、白色(1)和蓝色(2)。对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。分别表示红色、白色和蓝色。
2025-03-26 15:19:33
322
原创 LeetCode-451. 根据字符出现频率排序
要解决这个问题,我们需要根据字符出现的频率对字符串进行降序排序,同时相同字符必须连续出现。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。注意"cacaca"是不正确的,因为相同的字母必须放在一起。'e'出现两次,'r'和't'都只出现一次。注意'A'和'a'被认为是两种不同的字符。如果有多个答案,返回其中任何一个。是它出现在字符串中的次数。
2025-03-26 14:59:58
280
原创 LeetCode-347. 前 K 个高频元素
include <cstdlib> // 用于 rand() 函数#include <unordered_map> // 用于哈希表统计频率#include <vector> // 用于动态数组存储元素public:// 阶段1: 统计每个数字的出现频率// 哈希表存储(数字,出现次数)// 遍历数组统计频率,O(n)时间复杂度// 阶段2: 准备可排序的数据结构// 存储格式(数字,频率)// 将哈希表项转为可排序的vector// 阶段3: 定义降序比较规则。
2025-03-25 11:45:54
439
原创 LeetCode-215. 数组中的第K个最大元素
这道题的难度很高,我最开始是采用普通的快速选择,虽然答案是对的,但是会超时,然后问了下AI,才知道该用。,但我也是看了很久才看懂的,接下来我会挑一些重点的给你们讲讲、也就是将数组分为。),有效避免输入数据有序导致的 O(n²) 最坏时间复杂度。区间随机选取一个元素作为基准值,确保算法鲁棒性。请注意,你需要找的是数组排序后的第。三个区间,不过需要注意一下开闭区间。你必须设计并实现时间复杂度为。个最大的元素,而不是第。每次随机选择基准值 (初始处理整个数组 (
2025-03-24 09:36:28
414
原创 QT基础十二、标准项模型:QStandardItemModel
在 Qt 框架中,标准项模型(Standard Item Model)是一种通用的数据模型,用于表示树形或列表结构的数据。它是类的实现,属于 Qt 的模型-视图架构的一部分。标准项模型提供了一种简单而灵活的方式来存储和操作数据,并与视图组件(如QTreeViewQListView或QTableView)结合使用。
2025-03-04 19:30:42
573
原创 LeetCode-540. 有序数组中的单一元素
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。,从而排除了可能包含单独元素的中间位置。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足。,以确保搜索范围包含当前。
2025-03-04 10:11:23
316
原创 QT基础十一、文件系统模型:QFileSystemModel
是 Qt 框架中的一个类,属于QtWidgets模块。它是一个专门用于表示文件系统的模型(Model),通常与视图组件(如QTreeView或QListView)结合使用,以提供对本地文件系统目录结构的可视化展示和交互功能。
2025-03-02 16:45:07
407
原创 LeetCode-154. 寻找旋转排序数组中的最小值 II
它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的。循环的目的是逐步缩小查找范围,直到找到最小值。你必须尽可能减少整个过程的操作步骤。的数组,预先按照升序排列,经由。分别指向数组的起始和末尾。
2025-03-02 10:52:08
314
原创 LeetCode-81. 搜索旋转排序数组 II
请你编写一个函数来判断给定的目标值是否存在于数组中。已知存在一个按非降序排列的整数数组。你必须尽可能减少整个操作步骤。,数组中的值不必互不相同。在预先未知的某个下标。
2025-03-02 10:22:47
276
原创 QT基础十、表格组件:QTableWidget
是 Qt 框架中的一个控件,用于显示和编辑表格数据。它是基于QTableView的高级实现,提供了一个更简单、更直接的方式来操作表格数据,而无需深入理解底层的模型-视图架构(Model-View Architecture)。内部使用了默认的来存储和管理表格中的单元格数据。
2025-03-01 22:46:49
770
原创 QT基础九、浮动窗口:QDockWidget
是 Qt 框架中的一个类,用于创建可停靠的窗口部件(Dockable Widget)。它通常被用来实现应用程序中的浮动面板或工具窗口,这些窗口可以停靠在主窗口的边缘、浮动在主窗口之外,或者隐藏起来。提供了灵活的用户界面布局功能,常用于需要高度定制化和动态调整界面的应用程序。vs的最右边的窗口就是一个浮动窗口。
2025-03-01 15:50:15
495
原创 LeetCode-34. 在排序数组中查找元素的第一个和最后一个位置
为了满足时间复杂度 O(logn) 的要求,我们需要分别对这两个位置进行两次独立的二分查找。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。
2025-02-24 21:01:12
483
原创 LeetCode-69. x 的平方根
8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。我们可以把这道题想象成,给定一个非负整数。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。在定义域上是单调递增的。
2025-02-24 19:41:06
279
原创 QT基础八、与时间相关的UI控件
是 Qt 框架中的一个类,用于处理时间和执行与时间相关的操作。它主要用于表示一天中的时间(小时、分钟、秒和毫秒),而不涉及日期。 提供了许多有用的功能,例如时间的设置、比较、加减操作等。2. 获取当前时间3. 设置时间4. 时间格式化常用的格式符:6. 时间比较可以使用 , , 等运算符来比较两个 对象:7. 计算时间间隔8. 判断时间是否有效9. 使用 测量时间间隔二、日期类:QDate 是 Qt 框架中的一个类
2025-02-21 16:39:18
850
原创 LeetCode-524. 通过删除字母匹配到字典里最长单词
这是一个双指针的问题,双指针应用在哪呢?就是用在辅助函数里,来判断某个字符串是否是另一个字符串的子序列,具体方法是使用双指针,分别遍历。因为前面已经将字典进行排序,而且字典优先按长度降序排列,如果长度相同则按字典序升序排列。也就是说,第一个找到的字符串就是最符合要求的答案。为了方便比较长度和字典序,可以先对字典进行排序:优先按长度降序排列,如果长度相同则按字典序升序排列。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。中最长的字符串,该字符串可以通过删除。
2025-02-20 21:50:15
679
原创 QT基础七、用纯代码编写界面
终于迎来了界面开发的实战环节!今天我们将通过纯代码的方式,亲手打造一个界面。如果你对 Qt 感兴趣,欢迎订阅我的(完全免费哦)。虽然前面几篇文章主要是基础知识讲解,可能会显得稍微平淡,但它们是迈向实战的重要基石。而今天,我们将迎来一次小型的代码实战——用代码实现一个如下图所示的完整界面!这不仅是一次实践的机会,更是一个让你快速掌握 Qt 界面开发技巧的绝佳起点。让我们一起动手,感受代码的魅力吧!
2025-02-18 17:37:42
1058
原创 LeetCode-680. 验证回文串 II
给你一个字符串 ,最多 可以从中删除一个字符。请你判断 是否能成为回文字符串:如果能,返回 ;否则,返回 。示例 1:输入:s = "aba"输出:true示例 2:输入:s = "abca"输出:true解释:你可以删除字符 'c' 。示例 3:输入:s = "abc"输出:false提示:3、解题思路 回文的定义 :双指针法 :辅助函数 :
2025-02-17 21:32:03
233
原创 LeetCode-76.最小覆盖子串
,更新start 、len的值,然后 char d = s [left++],当 need.count(d) 时,--window[d],当 window[d] == need[d]时,也就是不需要再收缩了,--valid,退出循环。,++window[c] ,如果 need[c] == window[c] 时,代表window 已经包含 need 里面的所有 c 字符了,那么 ++valid,也就是说,某个字符,已经完全满足。t 中两个字符 'a' 均应包含在 s 的子串中,
2025-02-17 18:34:41
344
原创 QT基础六、关联容器和集合容器
Qt关联容器:QMultiHashQt集合容器:QSetC++的map,是关联容器,用来存储“键值对”。QMap和std::map类似。底层都是使用“平衡二叉树”(红黑树)来存储数据是有序关联容器。
2025-02-17 14:53:07
585
原创 QT基础四、QString详解
头文件:模块:QT += core功能:Qt框架使用的字符串类型,使用方法与c++的std::string类似区别:1. QString使用 UTF-16 编码来存储字符串(也就是QChar)。这意味着它可以轻松处理各种语言的字符集,包括中文、日文、韩文等。字符串存储的字符,是char类型(8位,使用UTF-8编码)
2025-02-16 16:59:18
541
原创 QT基础二、信号和槽
在Qt框架中,信号和槽(Signals and Slots)是一种用于对象间通信的机制。它是一种非常强大且灵活的设计模式,广泛应用于事件驱动编程中。信号和槽机制允许对象之间以松耦合的方式进行交互,而不需要直接调用彼此的方法。2、核心概念信号是当某个特定事件发生时发出的通知。例如,按钮被点击、滑块值改变等。信号本身不执行任何操作,它只是通知其他对象发生了某些事情。槽是一个普通的成员函数,可以像普通函数一样被调用。槽的主要作用是响应信号,并执行相应的逻辑。信号和槽通过函数建立连接。
2025-02-15 16:48:08
1100
原创 QT基础一、学会建一个项目
因为优快云有很多付费才能吃到的史,本人对此深恶痛绝,所以我打算出一期免费的QT基础入门专栏,这是QT基础知识的第一期,学会建一个项目,本专栏是适用于c / c++基础不错的朋友的一个免费专栏,接下来的内容会涉及到许多术语或者说专有名词,对于不懂编译链、编辑器、调试器 (也就是从未自己装过c环境的朋友可以绕道了) ,c++STL不懂的朋友,请去打好基础,再来学习。这一篇文章不涉及QT的安装,如果有需要的,可以在评论区留言,我未来会出一期。
2025-02-14 19:44:30
572
原创 LeetCode-142. 环形链表 II
当快慢指针相遇时,慢指针走了a + k步,而快指针走了a + k + n*(k + c),其中n是快指针在环中绕的圈数。这时候,如果让一个指针从head开始,另一个从相遇点开始,每次各走一步。因为此时,一个走了a步,另一个走了c + (n-1)*b步,即总长度等于a。假设环外的长度是a,环内的部分,假设相遇点距离入口的距离是k,剩下的环长度是c。这说明,当从相遇点出发,走c步就会到达入口点,而c也就是剩下的环的长度部分。因为快指针的速度是慢指针的两倍,所以总路程也是两倍。,返回链表开始入环的第一个节点。
2025-02-12 18:11:33
905
原创 详解c++的constexpr
constexpr int factorial(int n) { // 编译期计算阶乘// 编译期计算,result = 120规则(C++11):函数体只能包含一条return语句(C++14 放宽)。参数和返回值必须是字面类型(Literal Type)。不能有副作用(如修改全局变量、I/O 操作)。特性constexpr核心目的运行时常量编译期常量初始化时机可运行时初始化必须编译期初始化函数支持不能标记函数为编译期计算可标记函数和构造函数适用场景运行时常量、成员保护。
2025-02-10 14:22:41
761
原创 详解c++的const关键字
/ 定义常量// 错误!常量不可修改特点:必须在定义时初始化,后续不可修改。优势:替代宏常量(如#define),具有类型检查和作用域。const。
2025-02-10 14:11:25
332
原创 LeetCode-88. 合并两个有序数组
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。因为这两个数组已经排好序,我们可以把两个指针分别放在两个数组的末尾,即 nums1。的数字已经复制完,剩余 nums1 的数字不需要改变,因为它们已经被排好序。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。需要合并 [1,2,3] 和 [2,5,6]。的末尾,所以我们还需要第三个指针,以便复制。需要合并的数组是 [] 和 [1]。中,使合并后的数组同样按。
2025-02-09 18:49:01
243
原创 LeetCode-167. 两数之和 II - 输入有序数组
因此 index1 = 1, index2 = 2。因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最。如果两个指针指向元素的和等于给定值,那么它们就是我们要的结果。小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍历。对于排好序且有解的数组,双指针一定能遍历到最优解。此时两个指针指向值的和小于给定值,因此左指针会一直右移直到到达。此时两个指针指向值的和大于给定值,因此右指针会一直左移直到到达。好序且有解的数组,双指针一定能遍历到最优解。
2025-02-09 18:10:19
227
原创 LeetCode-665. 非递减数列
最后,在每次遇到递减情况并进行调整后,需要记录修改的次数。如果修改次数超过 1 次,说明无法在最多改变 1 个元素的情况下使数组变成非递减数列,直接返回。刚开始写这题时,我还在嘲笑这道题配不上中等的难度,直到我第一次写完提交之后才发现原来自己是个小丑,我的第一个代码主要存在这样一个逻辑错误,当。,说明出现了递减的情况,此时需要对元素进行调整,同时记录调整的次数。,这种做法没有考虑到修改元素后可能会破坏前面已经满足的非递减条件。个元素的情况下,该数组能否变成一个非递减数列。,按照你的代码逻辑,会将。
2025-02-08 15:13:25
366
原创 LeetCode-406. 根据身高重建队列
因为高的人不会影响后面插入的矮的人的位置,或者说矮的人插入时,已经排好的高的人的数量就是他们前面可能的高的人数。当后面有比他矮的人时,他们的ki值决定了前面有多少比他高的,这时候插入到对应的位置就不会影响到已经排好的高个子的顺序。由于已经处理的人的身高都大于或等于当前处理的人,插入到k值的位置时,前面正好有k个满足条件的人。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。
2025-02-08 14:20:19
580
原创 LeetCode-122.买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。
2025-02-07 21:39:15
251
原创 LeetCode-763.划分字母区间
每个字母只能在其中一个片段出现,所以对于每个字符来说,它的最后一次出现的位置决定了所在片段的终点至少得在哪里。比如,假设有一个字符a,它在字符串中最后一次出现的位置是 i,那么包含a的片段必须至少延伸到 i 的位置,否则后面的a就会被分割到另一个片段,这样就不符合条件了。然后,遍历字符串,维护当前片段的起始和结束位置。当遍历到当前结束位置的时候,就可以确定一个片段的长度,并开始下一个片段。3. 对于每个遍历到的字符s[i],查看它的最后出现位置,如果这个位置比当前的end大,就更新end为这个位置。
2025-02-07 21:08:56
335
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人