自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【Leetcode】代码随想录Day16|二叉树3.0

所以在找最小路径的时候,要考虑找到的深度究竟能不能算做是整个树的深度。从最后优化版中可以看到,在H层中,递归到每一层的时候,都有一半是满二叉树,可以用O(1) 的方式直接计算出数量,只需要进行一次【getFullHeight】,即对于O(log n)层,每一层进行一次O(log n)的操作,复杂度为 O(log n × log n)既然非满二叉树的完全二叉树只有可能是最后一层按照从左往右的顺序右边没有填满,那么只要查看一个树的最后一层的最左边的深度和最后一层的最右边的深度是否一样,就可以判断它是不是满的。

2024-04-15 23:44:08 930 1

原创 【VSCode】解决远程配置jupyter notebook始终无法搜到kernel

jupyter kernel一直无法选择,总是出现如下提示。反复点install/enable没有用处。

2024-03-29 19:58:01 958 1

原创 【Leetcode】代码随想录Day15|二叉树2.0

root.left和root.right两个子树在一方反转后是否相等。但空间复杂度不太妙,还需要多traverse一次,应该直接在traverse中查看是否对称。先处理root,如果是None,则return None。接着将反转的root.left赋给root.right,另一边也一样。队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。:这是递归法的前序遍历,其余遍历方法和迭代法需要之后补充。:这是递归法的前序遍历,其余遍历方法和迭代法需要之后补充。

2024-03-23 08:24:09 276 1

原创 【Leetcode】代码随想录Day14|二叉树1.0

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。【除了递归,我们还可以用迭代法。递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。

2024-03-20 04:58:40 1142 1

原创 【Leetcode】代码随想录D13|栈与队列3.0

也想到了需要一直储存当前最大值,遇到更大的就更新,但这样仅限于是一个sorted list,每个右边的窗口的最大值都更大才能一直更新最大值(但也没甚意思,都sorted了当然是最右边的最大)。所以我们要用小顶堆,因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。【自己实现sorted由大到小的单调队列】每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。

2024-03-19 06:41:05 1247 1

原创 【Leetcode】代码随想录Day11|栈与队列2.0

遍历输入的s,将所有的开括号都存进stack,每次pop出最近最内侧的开括号,如果遇到关括号,就pop出最近的开括号看是否match,不match就return False。如果pop出的最近的字符和当前相同,那么这两个就为重复项,都需要被删去,正好latest被pop出来,而当前的不push进去,都被从栈中去除了。如果是数字就存进栈,如果是符号,就pop最近的两个数字,并进行运算,注意两个数字的先后顺序,尤其是对除法,然后将答案push回栈,方便后续的运算。

2024-03-17 05:04:09 510 1

原创 【Leetcode】代码随想录Day10|栈与队列1.0

python中使用deque()来建立队列。在pop()时,将除了最新(后)的全部pop重新push进队列,这些就变成比原本的最后一个要后进来的了,于是再正常pop()原本的最后一个即可。用list来模拟stack,可以用stack.pop()来完成queue.pop()。这样的话要让list的末尾变成最先进去的,这样只要pop(),先出的就是先进去的。time: O(n) 【pop()】O(1) 【其他】用两个stack来在push的时候反转顺序。好像无法简单地用数组实现队列,再实现栈。

2024-03-16 05:30:13 483 1

原创 【Leetcode】代码随想录Day9|字符串2.0

双指针法很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。反转当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。两级反转:先整体反转再局部反转或先局部反转再整体反转。KMP。

2024-03-15 06:33:11 1260 1

原创 【Leetcode】代码随想录Day8|字符串1.0

对于可以修改字符串的语言,如c++,探讨不额外建立空间的方式,思路就是通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。与【344 反转字符串】使用List[String]作为参数的类型,本题s为string,一旦定义,不能对其中的元素进行修改,所以无法用swap。k : (i+1)k]进行反转,如果超过了总长度,就是将剩下的全部,即[i*k:]反转。space: O(1) 或O(n) 取决于语言中字符串是否可以修改【python不可以】

2024-03-14 08:40:57 1098

原创 【Leetcode】代码随想录Day7|哈希表2.0

数组大小固定,在如涉及英文字母这种有少量固定量的数据非常合适,空间消耗小。set没有限制数值大小的时候,就没有办法用数组了。需要很大的数组,空间浪费。mapset只能存一个值,无序。而map可以存<key,value>

2024-03-13 09:38:48 975 1

原创 【Leetcode】代码随想录Day6 | 哈希表1.0

使用类似multiset的结构将两个词的字符都存入,因为字母肯定有重复,然后遍历t的字符来查询,查到就删掉一个,没查到或者最后s的multiset中还剩下字母,则不是异位词。在遍历t的时候减去次数,最后有哪个字母的count不为0,就不是异位词。与上一题用数组达成哈希表的方式一样,因为题目限制了输入的元素值不会超过在[0,1000]中,给定了范围,就可知tablesize=1001,而且题目说明nums1和nums2的长度在[1,1000]之间,1001对于空间复杂度来说即为O(n)。

2024-03-12 07:57:15 955 1

原创 【Leetcode】代码随想录Day4|链表2.0

多数需要dummy_head来节省对head的特殊处理因为单链表的特性,几乎都需要遍历双指针/快慢指针以彼此的间隔距离弥补长度的差距实现同步指向。

2024-03-10 08:33:10 1366 1

原创 【Leetcode】代码随想录Day3|链表1.0

为解决head本身可能需要被移除的情况,在head前加一个dummy new_head,new_head.next = head。从new_head开始,用ptr指向当前查看的ListNode,只要ptr.next还存在ListNode x,就查看x.val值,如果需要移除,则直接将ptr.next指向x.next,删除x;遍历中逐个将pointer方向反转,在将ptr的next指向pre时,暂时将真正的ptr.next存储在tmp中。单独处理删除head的状况,将head指向head.next。

2024-03-09 11:15:53 963

原创 conda常用指令及冲突解决

血泪教训是能pip install就pip,更大程度上避免手动兼容;conda的channel令人痛苦。

2024-03-08 20:30:10 668

原创 【Leetcode】代码随想录Day2|数组2.0

初始思路:问题:第一个思路有些复杂,边界上面有很多需要仔细思考的地方,代码可优化空间很大。优解与优化代码随想录:Python 定义规定大小的数组:Complexitytime: O(n)space: O(n)初始思路:在看到滑动窗口的提示的时候想象到了类似双指针的移动窗口,但是想到的是遍历left指针,但这样会陷入和暴力解法相同的思路。因为时间有限,没有继续深入发散,直接看了解题思路。参考思路后:滑动窗口:遍历right指针,限制子数组发展的长度。代码随想录(优解优化):Complex

2024-03-08 10:11:51 430

原创 【Leetcode】代码随想录Day1|数组1.0

找到中间index,查看target和nums[mid_idx]的大小关系,相等则返回mid_idx,target更小就向前找nums[:mid_idx],target更大就向后找nums[mid_idx+1:]。最差的情况复杂度会较高,假设整个数组都为val值,每个val都要从后往前一直找非val值到开头,则时间复杂度为O(n^2)。遍历数组,将遇到的val值与数组最后的非val值swap(如果最后也是val值,相互替换没有意义,一直向前找非val值的)。用快指针遍历,用慢指针收集不等于val的值。

2024-03-07 11:11:44 500

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除