自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 js第一天

4. let left, mid = 0实际上是mid为0,left为undefined了。写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。i++),其实和c的是一样的。5. 比target大,应该挪右指针。2. JS读数组长度是nums.length。,用于优化性能(位运算比除法更快)。3. nums[mid]写成mid。1. JS的if有中括号有大括号。

2025-03-23 13:26:26 287

原创 一次前端笔试的紧急复习

之前都是python学的,但是想转前端所以用Js。

2025-03-02 15:04:47 268

原创 二叉树复习总览

除了最后一层无任何子节点外,每一层上的所有节点都有两个子节点。

2024-10-31 07:46:58 1038

原创 Day26 二叉树08

其实就是root.left = 递归root.left,root.right = 递归root.right。当处理节点的时候,如果越界,就return 递归子节点。“就是在每次遍历的时候,如果节点的值大于范围,只传它的左子树;如果节点的值小于范围,只传它的右子树;【错误想法】我有想过每次把sum+= val,然后递归每次都传cur和sum。nums[:mid]不包括nums[mid],nums[mid + 1:]不包括nums[mid]。右子树递归时,传中间值后面的切片。每次左子树的val += sum。

2024-10-28 11:24:02 358

原创 Day20 二叉树07

利用二叉搜索树有序的特性,每次比较当前节点的值。如果当前节点的值比要插入的值大,往当前节点的左子树查找。反之则往右子树查找。力扣榜上最快的代码,按照我的理解换了顺序和注释。找到一个空位就可以插入节点TreeNode(val)了。用上一题的代码也是可以的。

2024-10-28 01:58:24 221

原创 自用记录 Web开发八股文

【代码】自用记录 Web开发八股文。

2024-10-24 16:21:09 371

原创 Day18 二叉树06

在外层作用域初始化变量,例如 minv = float('inf') 和 pre = None。在内部函数中使用 nonlocal 关键字,表明这些变量来自外层作用域,并在函数中对其进行修改。我的问题在于想到二叉搜索树的中序遍历有序,就会想迭代转数组。nonlocal是必须写在内层函数的,它只能声明对已有外部变量的引用。思路:二叉搜索树的中序遍历是一个从小到大的有序数组,,所以两个连续节点的差值即为候选的最小绝对差。所以最小绝对差一定是两个连续节点的差值。二叉搜索树的中序遍历结果是有序的。

2024-10-23 23:59:25 188

原创 Day17 二叉树05

发现空节点时返回True,不符合条件返回False,重点在于是返回return xxxx and xxxx,两个都真时才是真,于是递归变成全部都真才是真。这才是没有人用层序遍历和null占位写的理由,因为这道题从输入开始就是按照递归的思路设计的。我其实第一时间想到是,如果能写成层序遍历后的列表,然后两个列表相加,再把结构输出成树。需要注意是先判空,不然访问null.val又报错了,这是又一次忽略的细节。这在理论上是完全可行的,但会出现解答错误,这是输入导致的。当前节点的值是其左子树的值的上界(最大值)

2024-10-23 06:32:12 772

原创 Day16 二叉树04

这题有一个妙的地方,是每次路过一个节点就用sum减去当前节点的值,这样当最后sum==val时就是要找到路径总和了。这样子一定是最左边的先达到"depth > self.max_depth"的条件,被存到result。【提醒】另外,还是得把新写的方法写在原方法上面,老是写到一半忘记在主函数里调用。【算法关键】递归函数中,先遍历左子树,然后是右子树。这题跳过啦,赶赶进度。

2024-10-22 01:33:16 203

原创 Day15 二叉树03

错误点2:算法优先级问题。正确写法:return False if getHeight(root) == -1 else True。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。错误点1:return getHeight(root) == -1?记得调用时用self.,还有看清楚变量名应该写root还是node。这是C或Java语言的语法,python没有?这里会先判断==再判断:=。分开写,谨慎点总是好的。if lefth == -1: # 左子树不平衡。

2024-10-17 04:11:06 253

原创 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 418

原创 Day13 二叉树

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

2024-10-13 21:49:22 694

原创 复习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 255

原创 复习 Day04-day06

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

2024-10-09 06:33:10 359

原创 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 413

原创 Day10 栈与队列01

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

2024-09-25 18:59:49 442

原创 Day09 字符串02

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

2024-09-25 16:46:14 177

原创 Day08 字符串01

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

2024-09-24 16:58:37 285

原创 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 348

原创 Day06 哈希表 242字母异位词 349两个数组的交集 202快乐数 1两数之和

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

2024-09-24 14:17:26 1123

原创 Day04 链表02【24 19 142】

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

2024-09-20 01:19:30 435

原创 复习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 451

原创 Day03 - 链表 203 707 206

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

2024-09-14 15:53:51 355

原创 Day02 - 数组part2 209长度最小的子数组 59螺旋矩阵II

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

2024-09-13 20:49:30 421

原创 Day01 - 数据理论基础 704二分查找

如果使用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 330

空空如也

空空如也

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

TA关注的人

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