自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 我的第二段实习经历:在科拉奥有限公司的成长与感悟

进入第二个月,我开始参与 DoorWay 家政服务平台的相关工作,目前我的主要职责是对整个系统进行测试,提出 bug,如果是后端 bug 则定位到原因并进行修改。我设计了 “逻辑过期 + 开启线程更新数据库” 的方案:给缓存设置一个逻辑过期时间,当缓存过期时,不是立即让所有请求去访问数据库,而是只允许一个请求通过开启线程的方式去更新数据库和缓存,其他请求则返回旧数据。测试不是简单的功能验证,而是要站在用户的角度,考虑各种可能的使用场景,尽可能发现潜在的问题。第一周:初识埋点系统,搭建学习框架​。

2025-09-12 12:03:45 1148

原创 Acwing846.树的重心问题

删除该节点后,剩余连通块的最大节点数最小的那个节点。

2025-06-01 17:18:08 355

原创 Acwing844.走迷宫

给定一个n×m的二维迷宫矩阵,其中0表示可通行的路径,1表示墙壁。从左上角(1,1)出发,每次可以向上、下、左、右移动一格,求到达右下角(n,m)的最短路径步数。:BFS会先访问距离起点为1的所有点,再访问距离为2的点...数组下标从0开始,题目中的(1,1)对应代码中的(0,0)边界检查要严格(nx≥0且<n,ny≥0且<m)当访问到终点(n-1,m-1)时提前终止。:O(n×m),每个格子最多访问一次。:O(n×m),用于存储距离和队列。起点(0,0)入队,距离设为0。第一层扩展:(1,0)步数1。

2025-06-01 16:31:44 375

原创 Acwing843.n-皇后问题

将N个皇后放置在N×N的国际象棋棋盘上,要求任意两个皇后不能互相攻击(即不能处于同一行、同一列或同一对角线上)。该解法通过系统性的尝试和回溯,能够高效找出所有合法解,是解决N皇后问题的标准方法。每个解决方案输出n行,每行是一个长度为n的字符串,表示棋盘的一行。:通过递归尝试在每一行放置皇后,并使用剪枝策略避免无效搜索。第一行尝试在(0,1)放皇后,标记第1列和两条对角线。共一行,包含一个整数n(1 ≤ n ≤ 9)。第四行在(3,2)放皇后,得到一个解。:O(n²),存储棋盘和标记数组。

2025-06-01 15:51:22 469

原创 Acwing842.排列数字

给定一个整数 nn,要求生成数字 1∼n1∼n 的所有可能排列,并按字典序输出这些排列。

2025-06-01 15:23:53 432

原创 Acwing841.字符串哈希

给定一个长度为 nn 的字符串和 mm 个询问,每个询问指定两个区间 [l1,r1][l1​,r1​] 和 [l2,r2][l2​,r2​],要求判断这两个区间对应的子串是否完全相同。字符串仅包含大小写字母和数字。

2025-05-31 14:34:30 450

原创 Acwing840.模拟散列表

插入操作I x:向集合中插入一个整数x;查询操作Q x:询问整数x是否在集合中出现过。现在需要进行N次操作,对于每个查询操作,输出对应的结果。特性拉链法开放寻址法空间占用需要额外链表空间仅需数组空间冲突解决链表连接冲突元素线性/二次探测实现复杂度中等(需维护链表)简单适合场景数据动态变化频繁数据量稳定且内存有限查询效率平均O(1),最坏O(n)平均O(1),聚集时效率下降面试建议优先掌握开放寻址法(代码简洁,面试常考);理解拉链法的实现原理(考察数据结构设计能力)。

2025-05-31 14:05:24 765

原创 Acwing839.模拟堆

插入操作I x:向集合中插入一个数x;查询最小值PM:输出当前集合中的最小值;删除最小值DM:删除当前集合中的最小值(保证此时最小值唯一);删除第 k 个插入的数D k:删除第k个插入的数;修改第 k 个插入的数C k x:将第k个插入的数修改为x。现在需要进行N次操作,对于所有PM操作,输出当前集合的最小值。

2025-05-30 17:46:47 327

原创 Acwing838.堆排序

输入一个长度为 nn 的整数数列,要求从小到大输出前 mm 小的数。

2025-05-30 17:13:45 394

原创 Acwing837.连通块中点的数量

给定一个包含 nn 个点(编号为 1∼n1∼n)的无向图,初始时图中没有边。连接操作C a b:在点 aa 和点 bb 之间连一条边,aa 和 bb 可能相等;查询连通性Q1 a b:询问点 aa 和点 bb 是否在同一个连通块中,aa 和 bb 可能相等;查询连通块大小Q2 a:询问点 aa 所在连通块中的点的数量。

2025-05-30 16:33:56 337

原创 Acwing836.合并集合

有 nn 个编号为 1∼n1∼n 的数,初始时每个数各自属于一个独立的集合。合并操作M a b:将编号为 aa 和 bb 的两个数所在的集合合并。如果它们已经在同一个集合中,则忽略此操作。查询操作Q a b:询问编号为 aa 和 bb 的两个数是否在同一个集合中。

2025-05-30 16:16:27 313

原创 Acwing835.Trie字符串统计

本题要求维护一个字符串集合,支持插入和查询操作。对于每个字符,检查是否存在对应的子节点。若某个字符对应的子节点不存在,说明字符串不在集合中,返回 0。记录每个节点的计数,表示以该节点结尾的字符串的出现次数。移动到子节点,并在字符串遍历完成后,增加该节点的计数。来存储字符串,并统计每个字符串的出现次数。个操作,所有输入的字符串总长度不超过。行,每行包含一个操作指令,指令为。从根节点开始,逐个字符遍历字符串。若遍历完成,返回该节点的计数值。,字符串仅包含小写英文字母。)开始,逐个字符遍历字符串。

2025-05-30 14:59:02 237

原创 LeetCode739.每日温度

最终用时24ms,而我通过数组实现栈只用了8ms,因此可得结论在做算法题时,同各国自数组模拟栈的性能更好。输入: temperatures = [73,74,75,71,69,72,76,73]第0天(73°),第二天温度74°更高,等待1天 → 1。第1天(74°),第二天温度75°更高,等待1天 → 1。第2天(75°),第6天温度76°更高,等待4天 → 4。解释: 每天温度都比后一天低,最后一天无更高温度。输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]

2025-05-30 01:23:40 348

原创 AcWing831.KMP字符串

与朴素的字符串匹配算法相比,KMP算法通过预处理模式串构建next数组(部分匹配表),将时间复杂度从O(M*N)优化到O(M+N)。KMP算法至今仍是理解高效字符串匹配的基础,其"空间换时间"和"避免重复计算"的思想深刻影响了算法设计领域。模式串P在主字符串S中可能出现多次。KMP算法是计算机科学中字符串匹配领域的里程碑式算法,其发展背景体现了计算机科学家对高效算法的不断追求。"aba":前缀"a"与后缀"a"相等,长度1,next[3]=1。"ab":前缀"a",后缀"b",不相等,next[2]=0。

2025-05-30 00:31:13 1501

原创 Acwing154.滑动窗口

给定一个长度为n的整数数组和一个大小为k的滑动窗口,窗口从数组最左端滑动到最右端。对于每个窗口位置,需要求出窗口中的最小值和最大值。这种单调队列的方法能够高效解决滑动窗口最值问题,是算法竞赛和面试中的经典题型。:移除队尾比当前元素大(求最小值时)或小(求最大值时)的元素。:当窗口完全形成后(i >= k-1),输出队首元素。第一行两个整数n和k,分别表示数组长度和窗口大小。队列中存储的是数组下标,方便判断是否在窗口内。最小值使用单调递增队列(队首元素最小)最大值使用单调递减队列(队首元素最大)

2025-05-29 23:21:06 135

原创 Acwing830.单调栈

给定一个长度为N的整数数列,要求输出每个数左边第一个比它小的数。如果不存在这样的数,则输出-1。一行包含N个整数,第i个数表示第i个数的左边第一个比它小的数(不存在则输出-1)栈顶元素即为左边第一个比当前数小的数(若栈为空则输出-1)对于当前元素,弹出栈中所有大于等于它的元素。第二行包含N个整数,表示整数数列。第一行包含整数N,表示数列长度。1 ≤ 数列元素 ≤ 10^9。维护一个单调递增的栈。

2025-05-29 22:20:30 174

原创 Acwing829.模拟队列

实现一个初始为空的队列,支持以下四种操作:push x - 向队尾插入一个数xpop - 从队头取出一个数empty - 判断队列是否为空query - 查询队头元素的值对队列进行M次操作,其中empty和query操作需要输出相应的结果。

2025-05-29 22:00:42 193

原创 Acwing828.模拟栈

对栈进行M次操作,其中empty和query操作需要输出相应的结果。empty操作输出"YES"或"NO"(栈空时输出"YES")保证不会在栈空时执行pop或query操作。push x - 向栈顶插入一个数x。query - 查询栈顶元素的值。第一行包含整数M,表示操作次数。empty - 判断栈是否为空。query操作输出栈顶元素的值。pop - 从栈顶弹出一个数。

2025-05-29 21:50:18 232

原创 Acwing826

注意:第k个插入的数是指按照插入顺序的第k个数,而不是当前链表中的第k个节点。D k:删除第k个插入的数后面的数(k为0时表示删除头节点)I k x:在第k个插入的数后面插入一个数x(k>0)一行,包含链表从头到尾的所有节点值,用空格分隔。对链表进行M次操作后,从头到尾输出整个链表。第一行包含整数M,表示操作次数。使用数组模拟单链表,提高操作效率。维护一个插入计数器,记录插入顺序。在第k个插入的数后面插入一个数。H x:在链表头插入一个数x。删除第k个插入的数后面的数。删除指定位置后的节点。

2025-05-29 21:39:30 243

原创 LeetCode15.三数之和

给你一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ≠ j、i ≠ k 且 j ≠ k,同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]解释:唯一可能的三元组和为 0。输出:[[0,0,0]]

2025-05-29 21:11:53 154

原创 Leetcode11.盛最多水的容器(中等题)

给定一个长度为 n 的整数数组 height,数组中的每个元素代表一条垂直线的长度。第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。总是移动高度较小的指针(因为移动较高的指针不可能得到更大的面积)这道题的思路是通过双指针(我做的时候也没想到)。输入:[1,8,6,2,5,4,8,3,7]:初始时宽度最大,任何其他组合的宽度都会更小。才可能遇到更高的线,从而可能获得更大的面积。(可能更小),所以面积必然减小。

2025-05-29 00:35:04 417

原创 双指针法解决两数之和问题 - AcWing800.数组元素的目标和题解

这道题展示了双指针技巧在有序数组问题中的高效应用。通过合理利用数组的有序性,我们可以将看似需要 O(n²) 时间的问题优化到线性时间复杂度。这是算法竞赛和面试中常见的优化技巧。

2025-05-28 23:49:51 304

原创 Acwing803.区间合并

【代码】Acwing803 区间合并。

2025-05-28 23:29:05 158

原创 Acwing802.区间和 第二次写这道题目感觉思路清晰了好多(第一次思考很久)

通过将原始坐标映射到紧凑的连续索引,可以大幅降低计算复杂度和空间占用。排序后的列表将作为离散化后的新坐标空间,原始坐标与新索引形成一一对应关系。,很显然如果使用暴力搜索方式或者直接前缀和操作绝对是行不通的,因为题目中实际使用的数据很少,因此可以考虑到离散化算法。在离散化后的空间上执行原问题所需的操作(如前缀和、差分)。由于离散化后的坐标范围远小于原始范围,算法效率显著提升。对应的离散化索引可通过二分查找在排序后的数组中找到,返回的下标即为新坐标。使用二分查找快速定位原始坐标在离散化数组中的位置。

2025-05-28 22:42:42 277

原创 二进制中1的个数

根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000,就是我们想要的lowbit操作。使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终1的个数,共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。第二行包含n个整数,表示整个数列。0≤数列中元素的值≤109。

2025-05-28 21:26:31 196

原创 前缀和思路+代码

这样,对于每个询问,只需要执行 sum[r]-sum[l-1]。输出原序列中从第l个数到第r个数的和的时间复杂度变成了O(1)。对于每次查询,只需执行sum[r] - sum[l - 1] ,时间复杂度为O(1)首先做一个预处理,定义一个sum[]数组,sum[i]代表a数组中前i个数的和。我们把它叫做一维前缀和。

2025-05-27 13:28:29 297

原创 数的范围(二分)

所谓的二分算法,就是我们知道当前的候选区间中,一定存在我们要找到的答案,而且我们发现这个区间拥有单调性质此类的性质,那么我们可以不停地缩减候选区间的范围,达到排除无用答案的效果.二分的题目,往往会出现最大值最小值,或者单调性质,这道题目显然不例外,要我们离线查找,所以我们完全可以使用二分算法来处理这道题目.在一个范围内,查找一个数字,要求找到这个元素的起始位置和结束位置,请注意这个范围内的数字都是单调递增的,即具有单调性质.共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。

2025-05-26 16:45:29 209

原创 归并排序(详细分析)

将一段序列不断的迭代划分成两个区间,直到子区间为空或者只剩一个元素。然后不断将已有序的子序列递归合并,最终得到完全有序的序列;分治步骤的(2)求解子问题 哪去了?(1)子区间为空或者只剩一个元素,已经自动有序了。(3)合并的时候,双指针排序,也把子问题给解决了。实际上,求解子问题隐含在了(1)(3)之中。那么也就意味着所有子区间都成了有序的序列。(3)合并子问题的解并构成原问题的解。(3)合并子问题的解并构成原问题的解。聪明的小伙伴立马注意到加粗的字体。(1)分解成可解的子问题。(1)分解成可解的子问题。

2025-05-26 15:55:33 244

原创 快速排序算法的证明与边界分析

由q[l..i-1] <= x,i >= j(i-1 >= j-1) 和 q[j] <= x 可以得到 q[l..j] <= x。会使得 q[l..i-1] <= x, q[i] >= x 能否改为 会使得 q[l..i-1] < x, q[i] >= x。这里的 q[l..i-1] <= x 是配合循环不变式 q[l..i] <= x q[j..r] >= x 的。q[l..j] <= x意为q[l],q[l+1]...q[j-1],q[j]的所有元素都<= x。

2025-05-26 15:32:50 1806

空空如也

空空如也

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

TA关注的人

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