- 博客(154)
- 收藏
- 关注
原创 【hot100篇-python刷题记录】【滑动窗口最大值】
怎么将内层的查找最大值,O(k)压缩至O(1)完了,我好像想到python的max。只能尽可能少的-地在内层循环中搜索值。真的太强了,get到单调栈!还想用sort蒙混过关哈哈哈。
2024-08-23 09:07:39
429
原创 【hot100篇-python刷题记录】【找到字符串中所有字母异位词】
接着开始滑动窗口,每次从右边增加一个字符。因此初始滑动窗口大小为len(p)-1,当从右边增加一个元素,判断counter1是否等于counter2。如果counter2中left对应的字符数量为0,需要删除,避免影响下一次的判断。left和right指针都向右移动。先统计一遍p的counter1。相等:append(left)
2024-08-23 08:34:22
154
原创 【hot100篇-python刷题记录】【盛最多水的容器】
双指针法,num1在0处,num2在n-1处,相对移动收缩。每次单步移动短板,因为长板收缩面积肯定变小。
2024-08-23 08:12:33
134
原创 【hot100篇-python刷题记录】【字母异位词分组】
哈希表记录:key=同一个单词 value=各种形态(使用数组append)---最后list输出即可。判断是否同一个:sort即可。
2024-08-22 07:30:18
133
原创 【hot100篇-python刷题记录】【不同路径】
第二种:换个角度想想,不考虑外围那一圈,考虑了也是一种方法。多维动态规划的核心在于建立多维状态记录表。注意,需要判断是否存在,因为二维数组有边界。本题中,建立dp二维数组表(初始化为1)第一种处理需要判断边界。R5-多维动态规划篇。
2024-08-22 07:17:09
310
原创 【hot100篇-python刷题记录】【爬楼梯】
走到第i步阶梯的总方法数=sum(走到第i-1步阶梯的总方法数,走到第i-2步阶梯的总方法数)第i步是怎么来的(即动态规划公式)R5-真正的动态规划。
2024-08-22 06:55:38
127
原创 【hot100篇-python刷题记录】【买卖股票的最佳时机】
贪心的常规思路是找到贪心切入点,例如最经典的算法是安排最多活动问题,需要以结束时间排序,然后遍历不冲突,计算最大数即可(每次都选择最早结束的活动)。前i天利润=max(选择第i天卖出-前i天的最低买入成本,选择前i天中的最高利润值)利用哈希表记录每天买入能产生的最大利润值,该值通过两层循环遍历查找得到。贪心算法的使用需要满足贪心特征。即局部最优解等于全局最优解。动态规划点:从前i天价格最低的买入,卖出做单步的动态规划。动态规划公式:(当前规划需要与前面的规划产生联系)下,理论上还有70+篇任务本月。
2024-08-22 06:41:45
169
原创 【hot100篇-python刷题记录】【数组中的第K个最大元素】
堆排序(英语:Heapsort)是指利用堆(heap)这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。
2024-08-20 07:00:15
152
原创 【hot100篇-python刷题记录】【二叉树的中序遍历】
顺序:递归调用左子树,打印当前结点,递归调用右子树。ps:昨天被refused了,sad。
2024-08-20 05:49:45
218
原创 【hot100篇-python刷题记录】【矩阵置零】
使用thex和they将该元素的i和y存储起来,再分别遍历thex,将所有y的位置置0。遍历they,将所有x 置0。无非就是行和列都置0。
2024-08-19 06:23:53
197
原创 【hot100篇-python刷题记录】【最大子数组和】
4.cross函数中,计算跨过mid元素的数组的最大值,就可以从mid元素像左右两边扩展,由于可能出现一边倒的情况(左边/右边为0),则左右两边分别计算最大值,最后s1+mid+s2即可。2.将从left到right的计算简化为为left-mid,mid+1-right 以及left-mid-right 3者的最大值(因为有负数)3.上面左右两边的计算可以递归调用本身函数,left-mid-right的计算另起函数。当数组只有一个元素,这一条件需要放在递归计算那个函数,因为这是递归边界。
2024-08-19 06:13:05
328
原创 【hot100篇-python刷题记录】【和为 K 的子数组】
R5-子串篇滑动,应该可以使用滑动窗口来解题。貌似前缀和也可以,left,right两个指针,right的前缀和-left的前缀和表示的就是从left到right数组的和。这题之前做过,有点印象,先入为主。要利用前缀和计算某个连续数组的值。先使用哈希表记录每个前缀和出现的次数。当计算到某个前缀和为s的时候,我们判断s-k这个前缀和是否存在。如果这个前缀和是存在的,那么说明从s-k的位置到s的位置这一段连续的数组是符合题意的。
2024-08-19 05:43:54
329
原创 【hot100篇-python刷题记录】【无重复字符的最长子串】
遍历左指针,对于右指针也是遍历(分两种情况,情况1:没存在过,直接right+1;情况2:存在过,必须跳出去)原理好像是,两个相同的字母之间的就是最大非重复子串。你要检验是否出现过一个字母,用哈希表能做到O(1)这还是个不定长的滑动窗口。
2024-08-18 07:28:58
597
原创 【hot100篇-python刷题记录】【移动零】
要用双指针来实现,想到一个办法,左右两边双指针,当左边指针找到0就和右指针交换值,要减少操作次数的话,就顺便判断一下右指针是否为0即可,最后肯定是双指针碰撞的。那就让两个指针相邻从数组头出发,遇到0就交换值,right的值应该不为0才对。不对,不能交换值,因为不能移动非零元素的相对位置。
2024-08-18 06:42:35
198
原创 【hot100篇-python刷题记录】【两数之和】
之所以不会出现上面的案例不通过的情况是,他没有初始化哈希表,所以避免了两个相同值记录下标的问题,由于题目给出对于每个输入只能有一个答案,所以不会出现3个相同的值。在第一次遍历记录的时候,如果数组存在相等的两个数,就只会记录最后一个数的下标,这显然不是我们想要的。由于哈希表查找为O(1)复杂度,简化两层循环在于找到i和j之间的关联,关联点在于target是和。我得专注于思考一些优化的方法以及优化的原理了,而不是仅仅在于解决问题。所以我们可以遍历一层哈希表,key是值,value是下标。这个版本没有优化成功。
2024-08-18 06:20:00
584
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人