- 博客(46)
- 收藏
- 关注
原创 车厢重组c++
相邻的两节车厢交换”让人想到了冒泡排序,而且实际上每次交换都会使得逆序对数减1,也就是说排序的过程就是减少逆序对的过程。因此可以用冒泡排序来做,但题目只要我们统计输出最小旋转次数,即逆序对数,因此统计逆序对数即可。利用性质:数列中所有元素的逆序数之和等于。
2024-07-17 23:24:31
308
原创 岛屿个数c++
遍历二维数组,遇到一块陆地‘1’,那么就把包含这块陆地的岛屿用bfs_islands函数搜索一遍,并标记这些块已经被搜索过了。然后,“派一些船”从该岛屿上一块陆地的八个方向出发,让船在海水上行驶,如果有船能到达“世界边缘”,那么说明该岛屿没有被包围。注意岛屿 33 并不是岛屿 11 或者岛屿 22 的子岛屿,因为岛屿 11 和岛屿 22 中均没有“环”。岛屿 22 在岛屿 11 的 “环” 内部,所以岛屿 22 是岛屿 11 的子岛屿,答案为 11。最外层加一圈海水,这一圈海水即为世界边缘。
2024-04-09 15:27:59
565
1
原创 完全二叉树的层序遍历c++
这其实就是获得后序遍历的逆过程,获得后序遍历你要先找到最“左边”的结点,比如上图的值为D的结点,然后把这个数拿出来放到层序遍历的结果中,然后找到最“左边”的结点的兄弟节点E,把其放到层序遍历的结果中……直到把所有数拿完放到层序遍历的结果中。由于这颗二叉树是利用完全二叉树的性质构建的,一颗树中的结点从上到下,从左到右结点编号越来越大,我们是利用数组创建的结点,下标可以表示结点编号,因此只需顺序输出数组的元素即为层序遍历的结果。1. 先构建出最大的左子树,然后先往新构建的结点填数,再往早一些构建的结点填数。
2024-04-06 19:54:45
619
1
原创 外卖店优先级c++
我们可以在遍历record数组的过程中使用一个last数组记录一家外卖店上一次接到订单的时间,等到该外卖店的订单再次出现时再处理没有订单期间带来的优先级减少;而不是每一时刻都把没有订单的店铺的优先级减1。首先说一下暴力做法。从前往后遍历一遍订单信息,对于每个时刻,有订单的外卖店优先级加2,无订单的外卖店优先级减1。以前的思路是针对一个订单信息的时刻,一个时刻处理所有店铺的优先级,而现在的思路是针对一个订单信息的店铺,一家店铺处理一家店铺的优先级。6时刻时,1 号店优先级降到 3,被移除出优先缓存;
2024-03-22 22:08:18
476
原创 递增三元组C++
题目让我们求所有满足Ai < Bi < Ci的三元组组合,我们可以先将A, B, C三个数组按升序排序,设计分别指向A数组和C数组的指针ia、ic,一开始指向数组的第一个数。利用指针ic,从C数组中找到第一个大于B[i]的数,那么对于特定的一个B[i],共可以组成ia * 1 * (n - ic)个三元组。如果数组cnt[i]的含义表示A数组中值为i的个数,那么求cnt的前缀和s[i],s[i]表示A数组中小于等于i的个数,将i替换成B[i],则s[ B[i] ]表示A数组中小于等于B [i] 的个数。
2024-03-19 16:39:19
382
原创 连号区间数c++
第一个用例中,有 77 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4]找到用于优化时间复杂度的性质:在一个元素个数为R - L + 1区间 [L, R] 内,如果区间的最大值和最小值的差为 R - L,那么该区间是连号区间。第二个用例中,有 99 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[1,5],[2,2],[3,3],[4,4],[5,5]
2024-03-17 11:54:18
328
原创 *波动数列c++
从上面(2)式可以看出,对于确定的s,n,每个x都由一组(d1, d2, ..., dn)唯一确定,同时,如果确定了一个x,那么一组(d1, d2, ..., dn)也会唯一确定,即一个数列就确定了,因此(d1, d2, ..., dn)的合法组数等于满足题目要求的数列总数。发现左式的余数和 j - (n - i)a mod n的余数相同,根据集合定义,f[i - 1][([ j - (n - i)*a) mod n] 就是这些(d1,d2,…那什么样的一组(d1, d2, ..., dn)是合法解?
2024-03-16 00:26:35
636
原创 *地宫取宝c++
为所有从起点走到(i,j),且已经取了ki件物品,且最后一件物品的价值是C的合法方案的集合。集合属性为满足集合定义的方案数总和。
2024-03-13 14:14:39
635
原创 最长上升子序列c++
要计算以f[i]结尾的最长上升子序列,那么我们可以利用在a[i]这个数之前算过的最长上升子序列f[j],如果a[j] 小于 a[i],说明a[i] 是可以放到a[j]后面 成为一条长度为f[j] + 1的上升子序列的。如果a[i]能放到多条f[j]后面,那么以a[i]结尾的最长上升子序列为f[i] = max(f[i], f[j] + 1)。因为题目要求最长上升子序列,通过这样定义集合,我们可以枚举所有序列,并可以求出所有以f[i]结尾的最长上升子序列,那我们就可以f[i]中选出一个最大的作为答案了。
2024-03-08 14:50:10
388
原创 摘花生c++
对于本题,可以按第一步往哪个方向走来划分集合,分为两个小的集合:第一步向东走的,第一步向南走的。,第一步都是在(1, 1)这个坐标,那摘到的花生数可以设为f(1, 1) = m(1, 1) + f(1, 2)。,第一步都是在(1, 1)这个坐标,那摘到的花生数可以设为f(1, 1) = m(1, 1) + f(2, 1)。对于状态表示,又可以从集合定义和集合的属性两方面考虑。对于本题,我将集合f(i, j)定义为从某坐标(i, j)出发的所有路径,属性(即f(i, j)存的值)定义为摘到花生的最大数量。
2024-03-07 09:56:25
713
原创 蚂蚁感冒c++
两蚂蚁碰面会掉头,若其中一只蚂蚁感冒了,会把感冒传染给碰到的蚂蚁”,这句话看作是“两蚂蚁碰面会互相穿过,只是把感冒的状态传给了另一只蚂蚁”,因为哪只蚂蚁感冒了并不是题目的重点,重点是有多少蚂蚁感冒了。通过上面的代码可以发现,当第一只感冒的蚂蚁向右走时,只有rtl大于0,ltr才能加入到res中;在右界,若左界有向右走的蚂蚁,那么右界向左边走的必定被感染;向右边走的不会被感染。在右界,向右边走的蚂蚁必定不会被感染,向左边走的蚂蚁必定被感染。在左界,向左边走的蚂蚁必定不会被感染,向右边走的蚂蚁必定被感染。
2024-03-05 21:37:24
453
原创 买不到的数目c++
题目说“一定有解”,那么怎样的数据才有解?当gcd(n, m) 大于1,比如gcd(n, m) = 2,只要糖果的数量是2的倍数,那么这个数就能用n和m包装完,而糖果的数量不是2的倍数,就不能用n和m包装完,因此不存在最大不能买到的数量。而当gcd(n, m) 等于1时,必定有最大不能买到的数量。一开始不知道怎么做的时候,想要暴力枚举对于特定的包装n, m,最大不能买到的数量maxValue是多少,然后观察性质做优化。那么怎么确定枚举结果是否正确呢?
2024-03-04 21:19:30
413
原创 k倍区间c++
实际上,这个双层循环可以理解为,在右端点r固定,l 在 0 ~ r - 1 之间变化的情况下,可以找到多少个满足 (s[r] - s[l]) % k == 0的区间,判断条件变换一下得:(s[r] % k - s[l] % k) % k == 0,即在 0 ~ r - 1 之间能找到有多少个s[l] % k 等于 s[r] % k,使得[l, r]构成k倍区间(这样处理的区间可以做到不重不漏,因为当余数相同的s[i]越来越多时,固定一个r,变化的是l)。
2024-03-03 19:29:23
440
原创 激光炸弹c++
一个是本题的下标是从0开始的,而二维前缀和模板从1开始,因此下标要变一下。另一个是炸弹爆炸的范围可能比地图区间大,为了更好计算一个爆炸范围内的总价值,可以把地图“扩大”,扩大的地图目标价值为0。最后一个是题目说的目标是在格点而不是格子内的,炸弹只能“摧毁一个包含R×R个位置的正方形内的所有目标”,边上的不可以。由题知本题要求某个区间内数的和,联想到二维前缀和。我们可以先使用二维前缀和模板计算各区间的价值。然后枚举以某点为右下角,大小为R*R的正方形价值,取最大值。
2024-03-03 00:09:41
295
原创 四平方和c++
第一个双重循环保存 s = c^2+d^2 所有可能的值,又因为题目要求输出 c 和 d ,因此也要保留 c 和 d。第二个双重循环枚举所有 a 和 b 的组合,对于每个 a 和 b,判断是否有一个 s,使得 s + a^2 + b^ 2 = n。首先想到的是使用三重循环求出 a,b,c,d 可以通过 n - a - b - c 得到。通过两个双重循环我们发现,(c,d)组合与(a, b)组合在个数、数值上都相同,a和b是从小到大枚举的,所以第一次找到四元组时,a和b一定是四元组中最小的两个数。
2024-03-02 15:55:14
545
原创 分巧克力c++
观察数据范围,时间复杂度要限制在O(n logn)以内,同时观察到“每位小朋友至少能获得一块1×1的巧克力”,说明只要巧克力边长缩小到一定长度,一定有解。这个很容易证明:假设要切边长为s的小块巧克力,那么一块。因此本题可以利用这个性质来使用二分来做。边长的可能范围为1~100000。对于每个可能符合条件的边长,使用这个边长来分割N块巧克力,看分割出来的巧克力块数是否大于等于K。随着s减小,那么可以切的总块数会增加。
2024-02-29 19:09:40
763
原创 机器人跳跃问题c++
观察数据范围,时间复杂度要控制在O(nlogn)之间,观察到样例输出均不超过最高建筑物高度,结合题目所说的“如果H(k+1)
2024-02-28 19:38:46
299
原创 对象、函数、原型之间的关系
就类似通过字面量的方式直接创建对象一样。全局函数Object同时作为一个对象也有隐式原型对象__proto__, Object对象是由Function创建出来的,因此Object的隐式原型对象__proto__指向Function的显式原型对象Function.prototype。原型对象作为对象是被全局函数Object创建出来的,全局函数Object作为函数也有自己显式原型对象prototype,因此原型对象的隐式原型对象__proto__指向全局函数Object的显式原型对象prototype。
2023-09-17 11:28:32
133
原创 ES5面向对象原型继承
我们学习这种继承方式,是因为在ES6中使用class实现继承,背后也会转为最终方案中的代码来执行。因此了解原理是很有必要的。不足之处请指出!!
2023-09-16 19:55:01
127
原创 JS高级补充
目前学习JS高级,这里会有一些学习中遇到的问题和对这些问题的思考,当然这是个人笔记,格式就是很随意,某些知识的细节也可能不会给出,学JS高级的朋友遇到问题可以来看看,若笔记中哪里不对也希望能帮我指出。
2023-09-04 23:07:48
81
原创 移动距离c++
先尝试模拟和暴力,若这两者都不能,这根据题目要求的特点想一下需要哪些算法。本题主要是找出数字num所在的行和列的规律,并验证规律的正确性。X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3,⋯⋯。,需要求出它们之间的最短移动距离(不能斜线方向移动),空格分开,都在 1 到 10000 范围内,当排满一行时,从下一行相邻的楼往反方向排号。我们的问题是:已知了两个楼号。要求输出一个整数,表示。两楼间最短移动距离。
2023-08-03 23:27:53
206
原创 星系炸弹c++
从7月1日到8月1日经历31天,相当于32 - 1 天。从7月1日到7月23日经历 23 - 1 = 22天,从7月1日到8月24日经历31天,相当于31 + 24 - 1天。计算从某年某月某日开始,经过n天,是哪年哪月哪日,可以按天模拟,也可以按月份模拟。有一个贝塔炸弹,2014 年 11 月 9 日放置,定时为 1000 天,请你计算它爆炸的准确日期。日放置,定时为15天,则它在天,则它在2015年年1月月16$ 日爆炸。按天模拟,n —,d++,用一个月的号数判断月份,用月份判断年份。
2023-07-31 23:47:50
263
原创 滑动窗口 c++
我们发现,当新元素比原来窗口的一些元素要小时,那么这些元素就是没有用的元素,因为它们的位置在新元素之前,会比新元素提前被推出滑动窗口,同时由于新元素比这些元素要小,这些元素永远不会被当做最小值输出。而当最小值不在新窗口中时,即队列中第一个元素对应的数组元素不在新窗口时,我们把队头元素推出,这时新的队头对应的数组元素再先新元素比较,如果新元素不是最小值,就把它的下标放到队列的适当位置。一个简单的思路,就是在每一个滑动窗口中,遍历一次滑动窗口中的数,找到滑动窗口中的最大值和最小值,并用两个数组把它们存起来。
2023-07-27 13:44:09
413
1
原创 路由基础实验七:单区域OSPF协议组网配置与管理
OSPF还引入了区域的概念,采用层次化路由方式更好的减小了路由表的大小,课程相关知识只涉及单区域,建议选用主干区域号“0”。进入路由协议配置模式,完成网络公告。(5) OSPF配置中常见的错误包括广域网链路两端参数不一致导致邻接关系无法建立、路由通告错误、区域设置错误等,可使用show命令查看并纠正。(1)将参考带宽设置为1Gbps,配置前后使用show ip route查看路由条目中的度量值的变化。(1)OSPF是链路状态路由协议,采用开销作为度量,在思科设备中OSPF的管理距离为110。
2023-07-09 20:03:25
2917
1
原创 路由基础实验六:RIP协议组网配置与管理
被动接口:为了保障路由更新信息的安全性,可以把没有必要发送的更新的接口的配置为被动接口,被动接口不会往外发送路由更新信息,但是从该接口接收的更新信息是可以被路由协议学习的。(1) RIP协议是一种通用的距离矢量路由协议,以路由跳数作为度量,在动态路由协议(RIP、OSPF、BGP、EIGRP)中的优先级较低(管理距离为120)。3:默认版本控制:发送的是版本1,接收的是任意版本。(3) RIPv1是有类别的路由协议,RIPv2是无类别的路由协议,两种协议不兼容,启用RIP协议后默认运行第一版本。
2023-07-02 11:47:21
1650
1
原创 路由基础实验五: 静态路由组网配置与管理
建立Router1 S0/0/0和Router3 S0/0/0之间的链路,完成以下配置,注意使用show ip route查看配。使用在特权模式下使用show ip route查看路由器直连路由,确认刚才配置的接口及网络已经出现在路由表中。修改完成之后使用show ip route查看路由表的变化,使用ping命令测试网络的连通性。使用默认路由可以简化静态路由的配置,默认路由通常使用在末节网络(即路由器只有一个网络。(3)有关两个网络之间路径的路由信息并不能提供反向路径(即返回路径)的路由信息。
2023-06-30 22:21:25
1185
原创 单链表总结(c++)
单链表的置空、计算长度、搜索元素、获取特定元素地址、删除元素并返回其值、判断表空、前插后插法建立链表、修改特定元素的值、运算符重载等操作。
2023-02-06 12:31:52
225
路由11个基础实验一网络设备基本配置与管理二VLAN组网配置与管理三VLAN间路由配置与管理四生成树协议配置与……
2023-12-23
应用密码学各章思维导图Xmind
2023-06-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人