自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(187)
  • 资源 (2)
  • 收藏
  • 关注

原创 HJ27 查找兄弟单词【牛客网】

这篇文章介绍了如何查找兄弟单词的算法思路和实现代码。题目要求在一组单词中找出与目标单词字符组成相同但顺序不同的兄弟单词,并按字典序输出第k个符合条件的单词。 解题核心步骤包括: 统计目标单词各字符数量作为基准 遍历单词序列,通过字符计数比较筛选兄弟单词(排除目标单词本身) 对符合条件的兄弟单词进行排序 按要求输出结果 代码实现使用了计数器和排序算法,时间复杂度为O(nlogn),空间复杂度为O(n),适用于处理中等规模的输入数据。

2025-05-27 20:13:53 494

原创 HJ25 数据分类处理【牛客网】

题目要求对规则集(R)排序去重后,匹配数据集(I)中符合规则的字符串。解题思路:先对规则集排序去重,然后遍历数据集检查每个元素是否包含规则子串。匹配结果按格式输出:总匹配数、各规则对应的匹配项及其位置。时间复杂度为O(|R|×|S|),空间复杂度O(|R|×|S|)。参考代码使用双指针去重,自定义匹配函数,并按要求格式化输出结果。

2025-05-27 19:57:00 606

原创 Engineering a direct k-way Hypergraph Partitioning Algorithm【2017 ALENEX】

本文提出了一种高效的多层超图划分算法KaHyPar,能够直接进行k路划分而无需递归二分。算法创新性地融合了基于min-hash的顶点聚类、改进的收缩方法以及自适应局部搜索策略。通过引入顶点指纹技术优化邻域更新范围,开发更快速的收缩算法,并采用多队列结构将FM启发式算法扩展到k路情形。实验表明,KaHyPar在求解质量和速度上均优于现有工具hMetis和PaToH,特别在处理连接权重等目标函数时表现突出。该算法有效解决了大型超边处理、平衡约束满足等关键问题,为超图划分提供了新的高效解决方案。

2025-05-26 23:49:02 666

原创 k-way Hypergraph Partitioning via n-Level Recursive Bisection【2016 ALENEX】文献总结

本文提出了一种高效的多级超图划分算法KaHyPar,通过顶点收缩、组合初始划分和精细化优化三个阶段实现。算法创新性地采用缓存技术、懒更新策略和自适应不平衡预算分配,显著提升了运行效率和质量。实验基于310个来自VLSI、SAT求解等领域的超图,结果表明该算法比hMetis等工具快两个数量级,且划分质量更优。关键技术包括基于评分的顶点收缩、多种初始划分算法组合以及递归二分中的增益优化,为超图划分提供了高性能解决方案。

2025-05-26 23:33:34 822

原创 HJ14 字符串排序【牛客网】

该题目要求对输入的多个字符串进行字典序排序。解题思路是编写自定义比较函数cmp,比较字符串的字符顺序和长度,然后使用sort函数进行排序。时间复杂度为O(nlogn * 平均字符串长度),空间复杂度为O(n * 平均字符串长度)。代码实现包括输入字符串、排序处理和输出结果三个步骤。

2025-05-24 17:02:00 541

原创 HJ8 合并表记录【牛客网】

题目要求合并相同键的记录值,使用map结构存储键值对。遍历输入时,若键已存在则累加值,否则插入新键值对。最后按键升序输出结果。时间复杂度O(nlogn),空间复杂度O(n)。

2025-05-24 16:39:49 545

原创 HJ106 字符逆序【牛客网】

本文介绍了如何实现字符串逆序输出的方法。题目要求将输入的字符串逆序输出,测试用例展示了不同输入情况下的预期结果。解题思路包括使用 getline 函数读取整行字符串,并通过倒序遍历字符串实现逆序输出。参考代码展示了具体的实现方式,时间复杂度为 O(n),空间复杂度为 O(1)。代码通过从字符串末尾开始遍历,逐个字符输出,最终完成逆序操作。

2025-05-23 20:51:40 338

原创 300. 最长递增子序列【 力扣(LeetCode) 】

本文介绍了解决“最长递增子序列”问题的两种方法:动态规划和贪心算法结合二分查找。动态规划方法通过从后向前遍历数组,计算每个位置的最长递增子序列长度,时间复杂度为O(n²),空间复杂度为O(n)。贪心算法结合二分查找则通过维护一个递增序列,利用二分查找优化插入或替换操作,时间复杂度为O(n log n),空间复杂度为O(n)。两种方法各有优劣,动态规划易于理解,而贪心算法在效率上更优。

2025-05-23 20:41:05 1437

原创 HJ101 输入整型数组和排序标识【牛客网】

题目要求对输入的整型数组进行排序,并根据给定的排序标识决定升序或降序。解题思路包括:首先输入数组和排序标识,然后根据标识选择快速排序的顺序,最后输出排序结果。参考代码使用C++实现,通过sort函数结合greater或less实现降序或升序排序。时间复杂度为O(n log n),空间复杂度为O(log n)。

2025-05-22 21:41:36 272

原创 HJ33 整数与IP地址间的转换【牛客网】

本文介绍了如何实现整数与IP地址之间的相互转换。IP地址转换为整数的基本思路是将IP地址的每个部分乘以对应的位权($256^{4-i}$)并累加;而整数转换为IP地址则是通过不断除以位权,将商作为IP地址的每个部分。文章提供了具体的C++代码实现,时间复杂度为$\Omicron(1)$,空间复杂度为$\Omicron(1)$。代码通过字符串流处理输入,并利用位权计算完成转换,最终输出结果。

2025-05-22 21:25:06 837

原创 HJ23 删除字符串中出现次数最少的字符【牛客网】

本文介绍了如何删除字符串中出现次数最少的字符。首先,通过统计每个字符的出现次数,找到出现次数的最小值。然后,遍历字符串,输出那些出现次数不等于最小值的字符。该方法的时间复杂度为O(n),空间复杂度为O(1),其中n为字符串的长度。参考代码使用C++实现,通过数组记录字符出现次数,并最终输出符合条件的字符。

2025-05-21 21:31:44 371

原创 HJ20 密码验证合格程序【牛客网】

本文介绍了如何编写一个密码验证合格程序。程序需要满足三个条件:密码长度不少于8位;必须包含大写字母、小写字母、数字、特殊字符中的至少三种;不能存在两个独立的、长度大于2的连续子串完全相同。解题思路包括遍历字符串,统计字符类型数量,并使用哈希表检查子串重复情况。参考代码通过C++实现,时间复杂度为O(∑l_i),空间复杂度为O(max l_i)。程序最终输出“OK”或“NG”表示密码是否合格。

2025-05-21 21:23:24 777

原创 HJ17 坐标移动【牛客网】

题目要求根据给定的指令序列移动坐标,并输出最终位置。指令格式为方向字符(W、A、S、D)后跟数字,表示移动的步数。解题思路包括:1)使用 stringstream 分割输入字符串;2)判断指令是否合法,包括长度、字符类型和方向字符;3)根据合法指令更新坐标。最终输出坐标值。代码时间复杂度为 O(n),空间复杂度为 O(n),其中 n 为指令序列长度。

2025-05-20 23:31:32 629

原创 DP2 跳台阶【牛客网】

题目“跳台阶”要求计算从第0阶跳到第n阶的所有可能跳跃方式。每次可以选择跳1阶或2阶,因此问题可以转化为求斐波那契数列。状态转移方程为f(n) = f(n-1) + f(n-2),表示跳到第n阶的方法数等于跳到第n-1阶和第n-2阶方法数的和。通过初始化两个变量a和b为1,并利用循环互相累加,可以高效地计算出结果。时间复杂度为O(n),空间复杂度为O(1)。参考代码展示了如何实现这一思路。

2025-05-20 23:17:54 1305

原创 HJ10 字符个数统计【牛客网】

本文介绍了如何统计字符串中不同字符的个数。通过建立字符的散列表,遍历字符串中的每个字符,若字符未在散列表中出现过,则将其存入散列表并增加计数。最终输出不同字符的总数。该方法的时间复杂度为O(n),空间复杂度为O(1)。参考代码使用C++实现,通过向量模拟散列表,统计并输出结果。

2025-05-19 23:11:05 421

原创 HJ3 明明的随机数【牛客网】

《HJ3 明明的随机数》题目要求对一组随机数进行去重并排序输出。解题提供了两种思路:一是通过快速排序后去重,时间复杂度为O(nlogn),空间复杂度为O(n);二是利用散列(哈希表)进行去重,时间复杂度为O(n),空间复杂度为O(1)。两种方法均能有效解决问题,具体选择取决于对时间和空间复杂度的需求。参考代码分别展示了这两种方法的实现。

2025-05-19 23:03:48 921

原创 NC61 两数之和【牛客网】

本文介绍了解决“两数之和”问题的两种方法:排序+双指针和散列法。排序+双指针法首先对数组进行排序,然后使用双指针从两端向中间遍历,找到满足条件的两个数。该方法的时间复杂度为O(nlogn),空间复杂度为O(n)。散列法通过遍历数组,利用哈希表记录已遍历的元素及其下标,查找是否存在与当前元素相加等于目标值的元素。该方法的时间复杂度为O(n),空间复杂度为O(n)。

2025-05-18 20:00:55 950

原创 46. 全排列

题目要求返回一个不含重复数字的数组的所有可能全排列。通过回溯法,递归地确定每个位置的元素,当所有位置的元素确定后,将序列存入结果中。时间复杂度为O(n×n!),空间复杂度为O(n)。参考代码展示了如何通过交换元素和递归调用来实现全排列的生成。

2025-05-18 17:54:29 696

原创 HJ5 进制转换【牛客网】

本文介绍了如何将十六进制字符串转换为十进制数。题目链接和测试用例提供了具体的问题背景。解题思路分为两种:手动转换和系统转换。手动转换通过从字符串尾部开始,逐个字符计算其对应的十进制值并累加;系统转换则直接利用C++的输入流功能进行转换。两种方法的时间复杂度和空间复杂度均为O(n),其中n为字符串长度。参考代码分别展示了这两种实现方式。

2025-05-18 17:53:01 678

原创 17. 电话号码的字母组合【 力扣(LeetCode) 】

题目要求根据给定的数字字符串(2-9),返回所有可能的字母组合,类似于手机按键的字母映射。解题思路采用回溯法,通过深度优先搜索(DFS)遍历每个数字对应的所有字母,递归生成所有可能的组合。具体步骤如下:首先建立数字到字母的映射关系,然后递归遍历每个数字对应的字母,当遍历到最后一个数字时,将当前组合存入结果集中。时间复杂度为 $O(4^n)$(最坏情况下每层遍历4个字母),空间复杂度为 $O(n)$(递归栈深度)。

2025-05-14 23:18:21 921

原创 77. 组合【 力扣(LeetCode) 】

题目要求从1到n的整数中生成所有可能的k个数的组合。解题思路采用回溯法结合剪枝策略,确保生成的序列是递增的,从而避免重复。具体步骤包括:递归遍历每个位置的可能值,如果当前元素超出范围则剪枝;将合法元素加入序列,如果序列长度达到k则加入结果集;递归结束后回溯,移除最后一个元素。参考代码通过深度优先搜索(DFS)实现,时间复杂度为O(k * C(n, k)),空间复杂度为O(k)。

2025-05-14 23:16:55 718

原创 211. 添加与搜索单词 - 数据结构设计【 力扣(LeetCode) 】

本文介绍了如何设计一个支持添加和搜索单词的数据结构,特别处理了包含通配符.的搜索情况。通过构建字典树(Trie),实现了WordDictionary类,包含初始化、添加单词和搜索单词的功能。添加单词时,递归地将字符插入字典树;搜索单词时,递归地匹配字符,遇到.时遍历所有可能的子节点。时间复杂度方面,添加单词为O(|S|),搜索单词为O(26^{|S|}),空间复杂度为O(Σ|S_i|)。代码实现展示了具体的递归逻辑和字典树的操作。

2025-05-12 21:26:55 544

原创 212. 单词搜索 II【 力扣(LeetCode) 】

题目要求在给定的二维字符网格 board 中查找所有存在于单词列表 words 中的单词。单词必须通过相邻单元格的字母构成,且每个单元格的字母只能使用一次。解题思路是利用字典树(Trie)对深度优先搜索(DFS)进行剪枝优化。

2025-05-12 21:25:35 1870

原创 127. 单词接龙【 力扣(LeetCode) 】

基本思路是一样的,区别就在于单词的长度不固定,单词的字母范围不一样。本质上都是构图+BFS 找最短路径。的 最短转换序列 中的 单词数目。如果不存在这样的转换序列,返回 0。虽然复杂度相同,但是双向搜索的复杂度的系数会小一点。的 转换序列 是一个按下述规格形成的序列。【C 是单词长度,N 是单词个数】【C 是单词长度,N 是单词个数】

2025-03-28 10:26:23 772

原创 208. 实现 Trie (前缀树)【 力扣(LeetCode) 】

Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。【最坏情况下,就是每个字母都有 26 个后续, 则全部空间为 26 x 26】【除了初始化,其他三个操作的复杂度都为 n ,n 表示字符串长度】

2025-03-28 10:25:41 444

原创 909. 蛇梯棋【 力扣(LeetCode) 】

那么这个玩家将会顺着梯子到达方格 3 ,但 不能 顺着方格 3 上的梯子前往方格 4。(简单来说,类似飞行棋,玩家掷出骰子点数后移动对应格数,遇到单向的路径(即梯子或蛇)可以直接跳到路径的终点,但如果多个路径首尾相连,也不能连续跳多个路径)注意,玩家在每次掷骰的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也 不能 继续移动。返回达到编号为 n2 的方格所需的最少掷骰次数,如果不可能,则返回 -1。,如果该格子的值不是 -1 ,则多一个邻居,邻居为该格子的值。

2025-03-11 10:52:33 652

原创 433. 最小基因变化【 力扣(LeetCode) 】

给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找出并返回能够使 start 变化为 end 所需的最少变化次数。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。一次基因变化就意味着这个基因序列中的一个字符发生了变化。基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。注意:起始基因序列 start 默认是有效的,但是它并不一定会出现在基因库中。

2025-03-11 10:51:45 624

原创 210. 课程表 II【 力扣(LeetCode) 】

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1]。每条边只遍历2次,存放入边关系一次,删除一次】

2025-01-15 17:56:55 1035

原创 207. 课程表【 力扣(LeetCode) 】

在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1。否则,返回 false。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。【每个节点都会对应其他节点一次;每条边只遍历2次,存放入边关系一次,删除一次】

2025-01-15 17:51:02 1030

原创 399. 除法求值【 力扣(LeetCode) 】

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i]。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用 -1.0 替代这个答案。【使用空间有:图的边,图的顶点(最坏2倍边的空间),递归深度(最坏遍历所有边),已搜索顶点集合(最坏搜索过所有顶点)】注意:输入总是有效的。注意:未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。

2025-01-13 12:47:03 913

原创 130. 被围绕的区域【 力扣(LeetCode) 】

通过将输入矩阵 board 中的所有 ‘O’ 替换为 ‘X’ 来 捕获被围绕的区域。

2024-11-29 19:38:09 700

原创 133. 克隆图【 力扣(LeetCode) 】

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

2024-11-29 19:37:41 1041

原创 200. 岛屿数量【 力扣(LeetCode) 】

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

2024-11-27 15:13:41 1182

原创 230. 二叉搜索树中第 K 小的元素【 力扣(LeetCode) 】

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?

2024-11-21 12:30:00 342 1

原创 98. 验证二叉搜索树【 力扣(LeetCode) 】

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

2024-11-21 12:28:53 791

原创 103. 二叉树的锯齿形层序遍历【 力扣(LeetCode) 】

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

2024-11-19 20:20:29 589

原创 530. 二叉搜索树的最小绝对差【 力扣(LeetCode) 】

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。

2024-11-19 20:20:02 383

原创 102. 二叉树的层序遍历【 力扣(LeetCode) 】

给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。

2024-11-17 17:56:55 599

原创 637. 二叉树的层平均值【 力扣(LeetCode) 】

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

2024-11-17 09:23:17 818

原创 199. 二叉树的右视图【 力扣(LeetCode) 】

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2024-11-17 08:44:44 797

面向对象的分析设计-小组作业-超市配送系统

内容概要:本文档主要介绍了《超市配送系统》这一软件项目的详细设计及开发过程。文档涵盖系统的背景介绍、系统分析(OOA)、系统设计(OOD)和最终总结四个部分。针对国内超市配送领域存在的问题如功能分散、配送和送货行为脱节、服务质量低下和服务类型缺乏等,提出了该系统的解决方案。系统不仅对现有超市配送服务体系提供全面的功能覆盖,还包括详细的类图、用况图、状态图及其相应流程描述。各个模块功能描述详细,例如用户管理和商品管理的具体操作步骤,并附带有系统内部的数据流转逻辑。在开发过程中采用了多种面向对象技术进行分析与设计,如封装和抽象、继承和组合等,确保系统功能实现的有效性和高效运行。整个系统设计既考虑了用户体验便捷性的最大化,也保障了超市配送管理效率和质量的极大提高,有助于填补当前国内市场中高质量配送体系的空缺。 适合人群:本系统的分析、设计与实施方案适合对面向对象程序设计有一定基础,并关注电子商务和物流配送行业的高校师生、IT技术人员或创业者。 使用场景及目标:本系统主要用于现代都市环境中提供线上线下一体化的超市物品选购与快速精准投递服务,适用于各类规模的连锁零售商店、生鲜超市及其他快销品类电商平台。具体应用目标包括优化订单处理流程,增强配送效率和服务响应速度;提升用户的线上购物业务交互友好度;支持多角色(顾客、工作人员)的操作便捷性,并实现全周期商品流通追踪,为管理层决策提供有力依据。 其他说明:通过对《超市配送系统》的学习可以深入了解OOP概念的实际运用案例。此外,从这个实践中我们可以认识到良好沟通对于项目协作的重要性,它帮助解决了诸如用况图、类图等问题;同时强调在系统开发前应先充分调研用户需求并据此进行深入的需求建模和技术选型。尽管最终成果还有改进空间,但参与其中的学习经历将是不可多得的技术积累。感谢指导教师提供的学术指导和支持,也为参与项目的每个成员的专业成长奠定了基础。

2025-01-08

从 0 开始的 python 生活项目图片资源

从 0 开始的 python 生活项目图片资源

2024-04-19

新世纪 听力上册 1-15 音频.zip

内容概要:新世纪英语听力音频1-15单元 适用人群:练听力的学生 使用场景及目标:任何音频播放器即可 其他说明:配合原文食用更好

2024-01-07

FZU软件工程操作系统课程复习资料-整理

FZU软件工程操作系统课程复习资料-整理

2022-02-06

FZU软件工程web课程复习资料-整理

FZU软件工程web课程复习资料-整理

2022-02-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除