![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 62
weixin_45588765
这个作者很懒,什么都没留下…
展开
-
leetcode(5)
二叉树的直径可能不会经过根节点,不能直接将根的左子树最大高度+右子树最大高度,还要比较最大直径和当前直径。要想时间复杂度为o(n), 遍历一遍链表就是o(n),将链表放到数组中看是否是回文,加起来还是o(n)每次将节点放入队列中,计算队列长度,队列头弹出当前队列节点,并依次将节点的左右节点放入队列中。链表查询时间复杂度为o(n), 数组查询时间复杂度为o(1)层次遍历类似广度优先搜索BFS,可以采用队列实现。原创 2024-05-13 00:20:08 · 231 阅读 · 0 评论 -
leecode(4)
遍历数组,设置局部最大和和全局最大和,当前局部最大和=max(当前遍历的数,当前遍历的数+局部最大和),因为如果之前的和加上正数会更大,但是如果这个正数本身值就很大,比之前加起来的还大,那么可以从这个数开始计算。分治法的话(复杂度为o(nlogn)),需要将数组分成左边和右边两个部分,但连续数组的最大和的查找需要三个部分,完全在左边,经过中间点,完全在右边。如果节点是白色,说明没有被访问过,标记成灰色,将右节点,节点和左节点入栈。需要写2个子函数,返回三个部分的最大值和查找经过中间点的最大值。原创 2024-05-12 22:48:34 · 295 阅读 · 0 评论 -
Leecode(3)
左指针向右移动一位。初始化一个哈希表sum_count,存储里面所有可能的和的值(键)和它们的个数(值),初始为{0:1},因为cumulative_sum初始为0。思路: 还是用双指针,一个数组table存储t的字母出现次数,一个数组stable存储存储s的字母出现次数,count计算子串中t的字母出现次数。滑动窗口就是双指针,右指针到p的长度时停下,如果窗口中字符串和p一样,就记录左指针的位置,否则左指针右移一位。注意k可以为0,而return的count初始值如果是0的话,需要考虑避免这个0的问题。原创 2024-04-10 14:20:11 · 402 阅读 · 0 评论 -
leecode(2)
除了暴力解,可以用排序+双指针, k遍历数组,i=k+1,j=len(nums)-1,当和小于0说明i应该增大,和大于0说明j应该减小,时间复杂度为O(n^2)使用双指针,一个从头,一个从尾,因为两指针i,j距离越大越好,i和j数组值小的那个向中间移动一格。时间复杂度就会只有O(n)双指针,每一列找左边最大,和右边最大,左右当中的短板就是倒水的极限。使用的是两次遍历,时间复杂度是O(n^2)原创 2024-03-24 15:50:17 · 309 阅读 · 0 评论 -
Leecode(1)
简单版(1)原创 2024-03-22 19:11:31 · 339 阅读 · 0 评论