- 博客(657)
- 收藏
- 关注
原创 2025 二分查找
在 a 中找到 x 合适的 插入点 以维持有序。★★★★★ 闭区间 [0, len(a)]如果 x 已经在 a 里存在,那么插入点会在已存在元素之前(也就是左边)。返回的插入点是 a 中已存在元素 x 的右侧。key 指定带有单个参数的 key function 用来从数组的每个元素中提取比较键。 为了支持搜索复杂记录,键函数不会被应用到 x 值。如果 key 为 None,则将直接进行元素比较而不需要中间的函数调用。★★★★★ 一定要搞清楚是插入位置!!!bisect_right 右侧插入位置,
2025-02-22 12:49:39
709
原创 Kadane 算法
除了基本的最大子数组求和外,Kadane算法还可以应用于其他领域,比如金融数据分析(寻找股票价格波动期间的最佳买入卖出时机)、信号处理(检测音频文件中最响亮的部分)等。任何涉及序列数据并需找出局部最优解的情况都可能适用这种高效的方法。globalMax 保存迄今为止发现的最大子数组和。对于每一个新元素,决定将其加入现有子数组还是重新开始一个新的子数组取决于能否增加总和。Kadane 算法用于解决最大子数组和问题,即在一个整数数组中找到具有最大和的连续子数组。
2025-01-31 20:43:33
160
原创 Python 正则表达式
正则表达式是对字符串提取的一套规则,把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。python 中 re模块提供了正则表达式的功能,常用的有四个方法(match、search、findall)都可以用于匹配字符串。
2024-12-16 18:01:31
811
原创 正则表达式中^的用法
1 .只要是”^”这个字符是在中括号”[ ]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定 开头。2 .这里说的是直接在”[ ]”中使用,不包括嵌套使用。3 .其实也就是说”[ ]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思。
2024-12-16 17:25:42
468
原创 python 04 sort
膑至,庞涓恐其贤于己,疾之,则以法刑断其两足而黥之,欲隐勿见。齐使者如梁,孙膑以刑徒阴见,说齐使。代码实现时,由于 nums2 不能排序,可以创建一个下标数组 ids,对 ids 排序,即 ids[0] 对应 nums2 中最小值的下标,ids[1] 对应 nums2 中第二小值的下标,……用双指针操作 ids,从而知道每个下标所要对应的 nums1 的元素,也就找到了所要求的 nums1 的排列。如果它比不过齐威王的下等马,则用田忌的下等马比齐威王的上等马(nums2 的最大值)
2024-09-27 10:11:25
1517
原创 python 03 String
844. 比较含退格的字符串class Solution: def backspaceCompare(self, s: str, t: str) -> bool: # 方法一:栈 # a, b = [], [] # for c in s: # if c != '#': a.append(c) # elif a: a.pop() # for c in t: #
2024-09-27 09:57:09
1702
原创 python 02 List
例如:n = 201, 201 - 9 - 90*2 = 12, m = 11, 此时第 N 位数字所在整数是 3 位数中第 m // 3 + 1 = 4 个数的第 m % 3 + 1 = 3 位。第 N 位数字,假设它属于第 num 个数,先确定 num 是几位数,再确定是该位数中的第几个,从而确定 num,最终找到是 num 的第几位然后取出。此时 i 是目标数字所在整数的位数, i 位数的第 n // i 个,第 n % i 位。集合 set set.add,去重功能,无序,分类。
2024-09-25 21:14:35
1160
原创 2024-5-28 刷题题单
使用了虚拟头结点的技巧,也是为了防止出现空指针的情况。例如:链表 head = [1,2,3,4,5],需要删除倒数第 5 个结点,也就是第一个节点。按照算法逻辑,应该首先找到倒数第 6 个节点。但由于头节点不存在前驱节点,因此需要在删除头节点时进行特殊判断。添加一个哑结点,让它的 next 指针指向链表的头节点,头节点的前驱节点就是哑节点本身。
2024-05-28 09:25:14
526
原创 容斥原理系列
容斥原理:指把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。假设班里有 10 个学生喜欢数学,15 个学生喜欢语文,21 个学生喜欢编程,班里至少喜欢一门学科的有多少个学生呢?最终状态(即 n)的范围非常大。试图自底向上递推或是按照通常的自顶向下回溯显然会超时(比如动态规划、DFS等方法)。第一时间应该想到二分法。
2024-04-14 13:14:18
166
原创 2024 春招冲刺百题计划 题单
两数相加题解中等旋转链表题解中等删除排序链表中的重复元素 II题解中等反转链表 II题解中等两两交换链表中的节点题解中等重排链表题解中等相交链表题解简单。
2024-04-07 18:03:33
167
原创 七、其它线性 DP
七、其它线性 DP§7.1 一维发生在前缀/后缀之间的转移,例如从 f[i−1] 转移到 f[i],或者从 f[j] 转移到 f[i]。
2024-04-01 18:55:44
121
原创 五、状态机 DP
五、状态机 DP讲解:状态机 DP一般定义 f[i][j] 表示前缀 a[:i] 在状态 j 下的最优值。一般 j 都很小。代表题目是「买卖股票」系列。
2024-04-01 18:53:24
118
原创 四、经典线性 DP
四、经典线性 DP§4.1 最长公共子序列(LCS)讲解:最长公共子序列 编辑距离一般定义 f[i][j] 表示对 (s[:i],t[:j]) 的求解结果。
2024-04-01 18:51:12
100
原创 leetcode 估算题
TLE 在信息学竞赛及其训练中是 Time Limit Exceeded 的缩写,即时间超限,表示你提交的程序运行使用了超出题目限定的时间,故该数据点不得分,通常出现在信息学竞赛在线评测系统(Online Judge)的错误反馈,是信息学竞赛常用的术语之一。4、在OJ评测时加入了文件读写。由于无法读取到输入而时间超限。2、算法效率较低(时间复杂度过高)。
2024-03-08 15:56:00
277
原创 Java 存图方式
链式前向星是一种完全用数组存储图的邻接表的存储结构,插入、遍历的复杂度都是O(E)[E为边的数量];用树的思维无法解决的问题,可以使用图的思维来解决。
2024-02-25 17:34:01
469
1
原创 十二、树形 DP
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。两节点之间路径的 长度 由它们之间表示。
2024-02-24 13:15:53
128
原创 石子游戏 I - IX
数学n 堆石子,按下标偶奇性分成二组。Alice 可以决定 Bob 只能取石子数量小的一组。Alice 总是可以赢得比赛。先手的 Alice 可以自由选择取走一组或二组的一堆石子。如果 Alice 决定取 piles[0],则剩下的部分在开始处和结束处的石子堆都属于第二组,因此 Bob 只能取走第二组的一堆石子。如果 Alice 取 piles[n - 1],则剩下的部分在开始处和结束处的石子堆都属于第一组,因此 Bob 只能取走第一组的一堆石子。
2024-02-03 13:33:03
182
原创 java split
limit :数组中字符串的数量限制。如果它为零,它将返回所有匹配正则表达式的字符串。regex : 应用于字符串的正则表达式。返回值:array of strings。
2024-01-20 11:27:40
479
原创 十一、数据结构优化 DP
单调栈上二分, Java 官方推荐使用 Deque 来模拟栈,Deque 没法直接通过下标检索(来实现手写二分),引入 TreeMap 辅助。floorEntry 方法找到第一个小于或等于指定 key 的 Map.Entry。ceilingEntry 方法找到第一个大于或等于指定key的 Map.Entry。java 数组模拟单调栈。
2024-01-10 20:33:50
338
原创 Leetcode 超难题目 Hard
这道题很有可能是LC主站(LCP除外)新的天花板,之所以难度分没有超过1719题,是因为双周赛样本量本身不多,而这题有一定的“猜结论”。某个LC积分2900+的大佬认为,即使数据范围只有1000,这也是一道相当难的题目。因为记录dp[j]为最优时,nums[j]的最小值(注意nums[j]很可能是被改过的),这样的DP本身就很难想到。而同时保证dp[j]最大nums[j]最小是否就更利于后面的转移,这点非常难证明。这个题的数据范围并不是1000,因此需要单调数据结构优化来保证复杂度合理。
2024-01-05 19:28:17
1273
原创 中位数 Median
462. 最小操作次数使数组元素相等 II2033. 获取单值网格的最小操作数2448. 使数组相等的最小开销2607. 使子数组元素和相等1703. 得到连续 K 个 1 的最少相邻交换次数2967. 使数组成为等数数组的最小代价564. 寻找最近的回文数
2023-12-18 13:14:24
619
原创 合并区间 Merge intervals
用一个哈希表/有序集合记录每个元素首次出现的位置和最后一次出现的位置,每个元素就对应着一个不可分割的区间。所以 [1,2,1,2][1,2,1,2] 这一段必须是完整的,不能分割。如果第二个区间和第一个区间没有交集,把合并后的区间个数 m 加一。如果第二个区间和第一个区间有交集,那么合并区间,维护合并后的区间的右端点 maxR。把该数组分到无法再分,得到 [3] + [1,2,1,2] + [4,4]再次遍历数组,那么第一个区间就是 [0, r[nums[0]]]。考虑每个 + 号选或不选,一共有 2。
2023-12-10 19:22:06
580
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人