- 博客(19)
- 收藏
- 关注
原创 第459场周赛
摘要 判断整除性:给定正整数n,判断n是否能被其数字和与数字积之和整除。通过计算数字和、数字积并验证整除性实现。 统计梯形数目I:在二维点集中统计由四个点组成的水平梯形数量。通过分组统计平行边并计算组合数实现。 位计数深度II:计算数组中每个数的二进制位计数深度,支持查询区间内深度为k的数的数量及单点更新。使用树状数组优化查询效率。 统计梯形数目II:统计任意梯形数量,通过斜率分组计算平行边组合数,并减去重复统计的平行四边形。 代码均采用高效算法处理大规模数据,时间复杂度优化至合理范围。
2025-07-20 22:28:04
622
原创 吃透二分法的模板解法(适合所有类似于二分的算法题)
文章摘要:本文介绍了三种二分查找变体的实现方法,用于在有序数组中寻找第一个大于等于目标值的位置。第一种使用闭区间[left,right],第二种采用左闭右开区间[left,right),第三种使用双开区间(left,right)。每种方法都通过调整左右边界和循环条件来实现。文章还解释了如何通过简单转换解决其他四种类似问题:第一个大于、最后一个小于、最后一个小于等于目标值的情况。这些方法的核心在于正确处理边界条件和终止条件,确保算法正确性和效率。
2025-07-08 23:57:03
325
原创 Linux课程笔记
本文总结了Linux基础命令与常用操作。主要内容包括:Linux目录结构、文件管理命令(如ls、mkdir、touch)、内容查看命令(cat、more)、文件操作命令(cp、mv、rm)、搜索命令(find、grep)、统计命令(wc)、管道符和重定向等。还介绍了vi编辑器使用、软件安装方法(yum/apt)、系统服务管理(systemctl)、软链接创建以及日期格式化等实用操作。这些命令涵盖了Linux系统的基本文件操作和日常管理功能,是使用Linux系统的基础知识。
2025-06-16 23:26:25
558
原创 力扣第 454 场周赛
摘要:本文包含4道算法题的解决方案:1.视频标题标签生成.2.统计特殊三元组.3.子序列首尾元素最大乘积.4.树中带权中位节点/
2025-06-15 15:48:04
1298
原创 MYSQL多表查询
本文总结了数据库多表关系的三种类型:一对多、多对多和一对一。重点介绍了多表查询方法,包括内连接、外连接和自连接等连接方式,以及联合查询和各类子查询(标量、列、行、表)的应用示例。最后提到可以通过实际练习来掌握多表查询技巧。全文简明扼要地概括了数据库多表操作的核心知识点。
2025-06-11 21:29:11
262
原创 函数和约束
摘要:本文介绍MySQL常用函数和约束。字符串函数如SUBSTRING从1开始索引;数值函数用于数学运算;日期函数如DATEDIFF计算日期差。流程函数控制程序逻辑。约束包括外键约束,定义表间关系,可通过设置删除/更新行为(如CASCADE)维护数据完整性。外键约束需注意参照完整性,指定删除更新时的级联操作。
2025-06-10 23:56:10
160
原创 DQL和DCL(基础知识)
DQL(数据查询语言)包含基本查询、条件查询、聚合函数、分组、排序和分页等功能,执行顺序遵循特定规则。DCL(数据控制语言)用于管理用户账户和权限控制。二者共同构成了数据库操作的重要组成部分,DQL侧重数据检索,DCL负责安全管理,为数据库系统提供完整的操作支持。
2025-06-10 23:10:33
343
原创 DDL和DML(基础知识)
本文介绍数据库操作语言DDL和DML的基本概念。DDL包含表的创建(定义数值、字符串、日期等数据类型)、修改和删除操作。数值类型需注意精度和标度的区别。DML则涵盖数据的添加、修改和删除操作。这些操作是数据库管理的基础,涉及表结构和数据的维护。
2025-06-09 23:11:16
190
原创 力扣第1234道题目
对于本题,设子串的左右端点为 left 和 right,枚举 right,如果子串外的任意字符的出现次数都不超过 m,则说明从 left 到 right 的这段子串可以是待替换子串,用其长度 right−left+1 更新答案的最小值,并向右移动 left,缩小子串长度。反过来说,如果在待替换子串之外的任意字符的出现次数都不超过 m,那么可以通过替换,使 s 为平衡字符串,即每个字符的出现次数均为 m。我们需要把一个 'Q' 替换成 'R',这样得到的 "RQWE" (或 "QRWE") 是平衡的。
2024-10-24 23:23:10
471
1
原创 第 420 场周赛
后序遍历的同时,计算每个节点 i 在后序遍历中的开始时间戳和结束时间戳,这也是子树 i 的后序遍历字符串在 dfsStr 上的开始下标和结束下标(代码用的左闭右开区间)。滑动窗口的内层循环结束时,右端点固定在 right,左端点在 0,1,2,⋯,left−1 的所有子串都是合法的,这一共有 left 个,加入答案。细节:建图时,由于我们是从左到右遍历 parent 数组的,下标 i 是递增的,所以子节点列表一定是升序,所以无需排序。子树的后序遍历字符串,是整棵树的后序遍历字符串的子串。
2024-10-20 20:35:18
1200
原创 力扣第 418 场周赛
从其中一个度数为 2 的点(拼图的角)开始,不断寻找度数等于 3 的点(拼图的边),直到找到度数为 2 的点(拼图的另一个角)为止。比如 gcdPairs=[1,1,2,2,3,3,3],对应的 gcdCnt=[0,2,2,3],计算其前缀和,得 s=[0,2,4,7]。如果删除后无法编译(剩余的方法调用了删除的方法),那么返回数组 [0,1,2,⋯,n−1]。遍历 invocations,如果存在从「非可疑方法」到「可疑方法」的边,则删除后无法编译,返回数组 [0,1,2,⋯,n−1]。
2024-10-09 16:20:43
879
原创 力扣第 140 场双周赛
如果 s[i]不等于t[j] 且 suf[i+1]≤j+1,说明修改 s[i] 为 t[j] 后,t[j+1:] 是 s[i+1:] 的子序列。回到原问题,我们枚举 i=0,1,⋯,n−m,那么当前需要匹配的子串为 s[i..i+m−1],对应的 Z 数组元素为 preZ[i+m] 和 sufZ[i+m−1]。如果 s[i]=t[j],既然能匹配上,那么就立刻匹配,直接把 i 加入答案。定义 suf[i] 为 s[i:] 对应的 t 的最长后缀的开始下标 j,即 t[j:] 是 s[i:] 的子序列。
2024-09-29 10:55:40
882
原创 力扣第 415 场周赛
如果选 b[i],那么需要解决的问题为:从 b[0] 到 b[i−1] 选 j 个数,与 a[0] 到 a[j−1] 计算点积,结果的最大值,即 dfs(i−1,j−1)+a[j]⋅b[i]。如果不选 b[i],那么需要解决的问题为:从 b[0] 到 b[i−1] 选 j+1 个数,与 a[0] 到 a[j] 计算点积,结果的最大值,即 dfs(i−1,j)。因此,定义状态为 dfs(i,j),表示从 b[0] 到 b[i] 选 j+1 个数,与 a[0] 到 a[j] 计算点积,结果的最大值。
2024-09-16 21:26:45
1394
原创 力扣第 414 场周赛
现在问题变成当前马在第 j 个兵的位置,且剩余没有被吃掉的兵的集合为 mask∖{j} 的情况下,继续游戏,两名玩家的总移动次数的最大值,即 dfs(j,mask∖{j})。因此,定义状态为 dfs(i,mask),表示当前马在第 i 个兵的位置,且剩余没有被吃掉的兵的集合为 mask 的情况下,继续游戏,两名玩家的总移动次数的最大值。如何判断当前是谁在操作?如果当前是 Alice 操作,则有dfs(i,mask)= max(j∈mask)dfs(j,mask∖{j})+dis[j][x][y]
2024-09-08 20:19:59
1361
原创 力扣第 413 场周赛
又例如数组为 [a,b,c,d],那么操作一次后变成 [ab,bc,cd],再操作一次,变成 [ab^2c,bc^2d],再操作一次,得到 ab^3c^3d。最大值对应的子数组,右端点不是 j,那么问题变成下标从 i 到 j−1 的子数组中的所有子数组的 f 值的最大值,即 mx[i][j−1]。最大值对应的子数组,左端点不是 i,那么问题变成下标从 i+1 到 j 的子数组中的所有子数组的 f 值的最大值,即 mx[i+1][j]。,它们的异或值分别为 2, 8, 4, 10, 12, 和 6。
2024-09-01 23:51:03
915
原创 力扣第 138 场双周赛
那么 2020 可以重新排列得到 2002 ,2002 是一个 k 回文串,所以 2020 是一个好整数。如果发现相邻两个敌人不满足上面的不等式,就交换这两个敌人的位置,这可以让受到的总伤害变小。首先,一直攻击同一个敌人,相比来回攻击多个敌人(雨露均沾)更好,因为这样我们被敌人攻击的次数更少。本质上来说,这个不断交换相邻敌人的过程,和冒泡排序是一样的。推广到更多的敌人,可以按照上式对 damage 和 health 排序,理由如下。从特殊到一般,想一想,如果只有两个敌人 A 和 B,我们应该先攻击谁?
2024-09-01 21:14:37
851
原创 第 412 场周赛
2.首先,直接用暴力模拟(用最小堆),直到原来的最大值,变成最小值,然后直接用公式计算出每个数还需要操作多少次。思路:用第二题的方法会超时,因此赛后找到别人的解法采用反向思维一下,我们遍历数组,将每个数的任意两个数字进行交换,查看多少能撞到一起的个数。思路:1.当nums只有两个数的时候,如果我们操作到两个数接近也就是x<=y且x*m>y,那么后续操作一定是在x和y两个数之间交替进行的,,执行操作后得到的整数可以有前导 0。,执行操作后一个整数可以有前导 0。数组中的任意两个元素都是近似相等的。
2024-08-25 17:28:21
1393
原创 致以后的自己
在研究生阶段自己先放松一两个月,想着自己应该为自己的工作冲刺了,当时想好冲刺Java了,于是自己便跟着网上的课程一个一个学,力扣每日一题的刷,于是便到秋招的日子了,自己差不多在8月份的时候也一个一个的海投简历,有笔就笔,有面就面,可是最终简历大部分都挂了,有好几个可以拿到30w左右的offer(菜鸟,同程,Anker)最终技术面都过了,但是最终却挂在了hr面上,有些技术面感觉答的都很好(京东,知乎),结果最后也莫名奇妙的挂了,起码提的问题感觉都回答上来了。保持好的工作状态,将自己的工作内容完成好。
2024-08-13 17:50:22
458
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅