随笔分类 - 算法
摘要:递归 具体做法: step 1:对于每个节点,若是不为空才能累计一次深度,若是为空,返回深度为0. step 2:递归分别计算左子树与右子树的深度。 step 3:当前深度为两个子树深度较大值再加1。 def maxDepth(self , root: TreeNode) -> int: # wri
阅读全文
摘要:def inorder(self, list: List[int], root: TreeNode): # 遇到空节点则返回 if not root: return # 先遍历左子树 self.inorder(list, root.left) # 再遍历根节点 list.append(root.va
阅读全文
摘要:具体做法: step 1:准备数组用来记录遍历到的节点值,Java可以用List,C++可以直接用vector。 step 2:从根节点开始进入递归,遇到空节点就返回,否则将该节点值加入数组。 step 3:依次进入左右子树进行递归。 def preorder(self, list: List[in
阅读全文
摘要:具体做法: step 1:从数组首尾开始,每次取中点值。 step 2:如果中间值等于目标即找到了,可返回下标,如果中点值大于目标,说明中点以后的都大于目标,因此目标在中点左半区间,如果中点值小于目标,则相反。 step 3:根据比较进入对应的区间,直到区间左右端相遇,意味着没有找到. def se
阅读全文
摘要:重复的留下一个 def deleteDuplicates(self , head: ListNode) -> ListNode: # write code here #空链表 if head == None: return None #遍历指针 cur = head #指针当前和下一位不为空 whi
阅读全文
摘要:思路:变成数组操作 def oddEvenList(self , head: ListNode) -> ListNode: # write code here p = head nums = [] while p: nums.append(p.val) p = p.next p = head num
阅读全文
摘要:思路: 链表最难受的就是不能按照下标访问,只能逐个遍历,那像排序中常规的快速排序、堆排序都不能用了,只能用依次遍历的冒泡排序、选择排序这些。但是这些O(n2)O(n^2)O(n2)复杂度的排序方法太费时间了,我们可以将其转化成数组后再排序。 具体做法: step 1:遍历链表,将节点值加入数组。 s
阅读全文
摘要:解题思路: 我们使用两个指针,fast 与 slow。 它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。 def hasCycle(self, head: ListNod
阅读全文
摘要:具体过程: step 1:判断空链表的情况,只要有一个链表为空,那答案必定就是另一个链表了,就算另一个链表也为空。 step 2:新建一个空的表头后面连接两个链表排序后的节点,两个指针分别指向两链表头。 step 3:遍历两个链表都不为空的情况,取较小值添加在新的链表后面,每次只把被添加的链表的指针
阅读全文
摘要:题目: 将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。 具体做法:k = 3 step 1:每次从进入函数的头节点优先遍历链表k次,分出一组,若是后续不足k个节点,不用反转直接返回头。 st
阅读全文
摘要:单链表中的第m和n之间元素反转 m = 2,n = 4 具体做法: step 1:我们可以在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就能保证第一个节点永远不会反转,不会到后面去。 res = ListNode(-1) res.next = he
阅读全文
摘要:第一次循环: 第一步:next = head.next将 head.next 赋值给 next 变量,即next 指向了节点2,先将节点2 保存起来。 第二步:head.next = pre (初始pre==None)将 pre 变量赋值给 head.next,即 此时节点1 指向了 None 第三
阅读全文
摘要:算法思想回溯实际上是一种试探算法,这种算法跟暴力搜索最大的不同在于,在回溯算法里,是一步一步地小心翼翼地进行向前试探,会对每一步探测到的情况进行评估,如果当前的情况已经无法满足要求,那么就没有必要继续进行下去,也就是说,它可以帮助我们避免走很多的弯路。回溯算法的特点在于,当出现非法的情况时,算法可以
阅读全文