自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day14 二叉树02

Python 的“多重赋值”机制允许你直接交换两个变量而不需要额外的临时变量。简单,写对啦。这里outside是外侧,inside是内测。第二次写:错误点1:缩进问题。没注意,直接把def compare和if对齐了,导致执行出错 AttributeError: 'Solution' object has no attribute 'compare'。错误点2:self.compare(root.left, root.right)没写return,导致所有输入都是NULL。

2024-10-15 17:49:16 212

原创 Day13 二叉树

满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,。

2024-10-13 21:49:22 545

原创 复习Day07

我虽然记得是前两个数相加,然后看后两个数的相加结果的负数是否在字典中,但是不记得怎么写字典,并且超出了时间复杂度。这是因为我先写了前面两个数相加,然后写后两个数字相加取负号,然后判断两个set中有没有一样的。记得defaultdict(int)就好。for l in nums4: # 这是 O(n)for k in nums3: # 这是 O(n)for i in nums1: # 这是 O(n)for j in nums2: # 这是 O(n)所以是O(n ^ 4)的复杂度了!

2024-10-11 01:21:11 135

原创 复习 Day04-day06

再各写了一次,递归法没问题,普通交换还是漏掉了处理前置节点指向这一对。里面正如注释所说,【注意点1】先处理first.next = next_one更方便,【注意点2】记得处理cur.next = second来保存这个节点。我写的错的和上次一模一样,上次就没搞懂但这次在家就可以直接问老雀头了,这样写的话会丢失双数的数。因为pre在交换后是节点对的第二个,没有追踪第一个节点,所以第一个节点会消失。你需要某个指针来追踪已处理节点的前一个节点,才能让它指向新的子链表的头。wow回来发现把链表都忘光啦~

2024-10-09 06:33:10 183

原创 Day11 栈与队列02

第一遍写的错误点:1. 不会处理运算。怎么压栈倒是学的很快,拿出来发现是字符串时就不会处理了。其中add, sub, mul都是operator库里的,from operator impact add,sub,mul。而div是自己定义的方法。2. 栈的初始化是stack = [],不要记错了。3. 先取出来的a1是后面的值,所以temp = self.op[i](a2,a1)。这个bug找了半天才意识到。

2024-09-26 16:22:41 314

原创 Day10 栈与队列01

语法:popleft() 是在Python的collections模块中deque类的一个方法,它用于移除并返回deque的左侧元素。双指针解法:把字符串的前面部分(slow指针走的部分)改成不重复的(重复的个体就改成fast指针指到的值),然后只输出0到slow的部分。发现和上一个元素一样时,slow指针退一步,fast指针前进一步,res[slow] = res[fast]就消掉了。使用栈来模拟队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。在上面的代码中,q2只是一个临时空间的作用。

2024-09-25 18:59:49 347

原创 Day09 字符串02

对python很简单,二刷不用看了。切片,一看就是要切片。下面两条KMP跳过。

2024-09-25 16:46:14 111

原创 Day08 字符串01

之前学的算法都是基于数组,所以这一题为了方便计算,也要result = list(s),先把字符串转换为数组。毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。stop 是切片结束的位置,但不包括这个位置的元素。如果不指定,默认取到序列的最后一个元素。start 是切片开始的位置,如果不指定,默认为0。step 是步长,表示取值间隔,默认为1。重点感觉是,我不懂python的切片。

2024-09-24 16:58:37 222

原创 Day07 哈希表02

看过一遍后就能自己写啦,比较简单,关键思路是num1+num2 == -(num3 + num4)时相加为0。这题乍一看可以哈希,但是再看几眼会觉得用哈希表会非常麻烦。append是list类型的一个方法,用于在列表的末尾添加一个新元素。add是set类型的一个方法,用于向集合添加一个新的元素。nums.sort(),python真方便呀真方便。为什么0,0,0也会不通过?算法关键:对i,左,右三个指针都需要跳过重复。无论是算法还是工业上,一般都是舍空间换时间。主要用到的是dict,python的字典。

2024-09-24 15:41:07 272

原创 Day06 哈希表

它会返回一个类似字典的对象,其中的键是 s 中的每个字母,值是该字母出现的次数。例如,如果 s = "listen",那么 a_count 会是 {'l': 1, 'i': 1, 's': 1, 't': 1, 'e': 1, 'n': 1}。开放地址法的核心思想是,当发生哈希碰撞时,不另用链表存储冲突元素,而是寻找哈希表中下一个可用的空槽,将冲突的元素存储在该空槽中。这没有用多线程的库,这不是多线程的。而如果用数组,数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。

2024-09-24 14:17:26 921

原创 Day04 链表02

用递归的方法,每次处理两个节点的交换,把第三个节点作为头结点传到下一层递归。我还以为是有方法获取链表长度呢,原来答案里的getLength方法和moveForward方法都是自己定义的。注意要用slow.next = slow.next.next,要用.next来操作它的指针,这样才有效。因为有迭代,不应该设虚拟投节点,不然每次迭代都新建一个头结点,没必要,不如往后再考虑一个节点。很快啊,我以为是删除正数第N个,啪得就写出来了,写完发现是倒数第N个。这天的题目就到这里了。↑快慢指针的写法,感觉以后会常用。

2024-09-20 01:19:30 342

原创 复习Day01-03

有点质疑为什么时间复杂度不是O(n^2)了,也可能会是target = 10, nums = [1,1,1,1,1,1,1,1,1,1]这种情况吧。nums is None 和 len(nums) == 0是两个不同的条件。(哈哈怪不得当时没看暴力,找不到正确答案,因为题目应该是改过了。看回了滑动窗口方法,题目大于等于,上次写只看到等于,这次写只写了大于,我真是个人才啊!(看了一下,其实不加这一句也差别不大,也很快处理完的。2. range(x,y, -1),怀疑之前的理解有误。三天了回顾一下前面的。

2024-09-18 18:07:55 344

原创 Day03 - 链表 203 707 206

要明白dummy_head是头节点,cur是目前节点,这就是我们一直在操作cur节点但最后返回的是dummy_head的原因。链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域,最后一个节点的指针域指向null。链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上。看完答案,真是好简单的语法,虽然有些好奇不用虚拟头结点会是什么样呢?好,全是语法,我之后看答案不额外写了,全都在看答案。要注意链表的节点是如何定义的,要能手撕。Python定义链表。

2024-09-14 15:53:51 259

原创 Day02 - 数组part2

另外,虽然有两个while,但是时间复杂度是O(n)而不是O(n^2)哦,时间复杂度看的是每一个元素被操作的次数。这里每个元素被右指针指到时操作一次,被左指针指到时操作一次,所以时间复杂度是2n,系数忽略,也就是O(n)。:发现很关键的一个点是我没有发现这个子数组是原本的数组的连续的一段“nums_l, nums_(L+1), ....” 下次审题就知道了。差点找到了需要的就return lenf了,忘了要再减掉左边的看看是否依然成立,这样就能找到最小的。这题的python解法不好找,贴一下:​​​​​。

2024-09-13 20:49:30 277

原创 Day01 - 数据理论基础

如果使用C++的话,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。知识补全:需要用left+(right-left)//2来确保获得的是整数,/--浮点数,//--向下取整。算法:left = mid当然可以,但是已经判断过mid不是了,所以left = mid + 1。例如,C/C++中二维数组是连续分布的,Java和Python不是。算法:脑子里要有二分的动画,切了中间发现要向左找当然是要把右边指针移过来了。先把 704写熟练,要。

2024-09-12 22:15:23 259

空空如也

空空如也

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

TA关注的人

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