![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣
princey2100
这个作者很懒,什么都没留下…
展开
-
Leetcode236. 二叉树的最近公共祖先 Lowest Common Ancestor of a Binary Tree - Python 递归法
1.当当前root==p or root == q 就将root返回,当同一层递归逻辑里的left 和 right都不为空时,说明当前root为所求lowest common ancestor;2.若只有left空或只有right空,则返回非空的。因为非空的即为所求,是从底层一直回溯上来的;3.若left和right都为空,则返回空。可能为叶子几点或该树的分叉不满足条件;原创 2022-12-09 17:28:10 · 782 阅读 · 0 评论 -
Leetcode501. 二叉搜索树中的众数 Find Mode in Binary Search Tree - Python 递归法
法一:利用二叉搜索树有序特性,中序遍历为有序数组,然后用哈希表统计频率,再将高频的众数返回即可。法二:利用二叉搜索树特性,边遍历,边比较。原创 2022-12-08 16:57:15 · 213 阅读 · 0 评论 -
Leetcode530. 二叉搜索树的最小绝对差 Minimum Absolute Difference in BST - Python 递归法
思路:1.中序遍历二叉搜索树得到的为一个有序数组,可利用此特性求Minimum Absolute Difference。2.一个有数数组两两之间数值间隔最小,所以只需比较两两之间的差值大小。递归法:递归法(边中序遍历边计算):原创 2022-12-08 13:36:04 · 291 阅读 · 0 评论 -
Leetcode98. 验证二叉搜索树 Validate Binary Search Tree - Python 递归法/迭代法
思路:二叉搜索树中序遍历结果是一个有序数组。利用此特性,可判断是否是一个正确的二叉搜索树。递归法:递归法(常规法:一边中序遍历,一边检查是否是有序):虽然但是,如果测试数据中有-float("INF"),而cur_max也等于-float("INF"),就无法比较各节点之间的大小了。所以需要新方法,用一个pre变量记录下前一个root.val,将最底层最左边的节点作为第一个赋值给pre的root:原创 2022-12-08 12:59:33 · 139 阅读 · 0 评论 -
Leetcode700. 二叉搜索树中的搜索 Search in a Binary Search Tree - Python 递归法/迭代法
二叉搜索树的特点:左子树的所有节点值 都比 root.val小右子树的所有节点值 都比 root.val大可利用此特性写code:递归法迭代法:原创 2022-12-06 22:55:03 · 169 阅读 · 0 评论 -
Leetcode617. 合并二叉树 Merge Two Binary Trees - Python 递归法
1.若遇到root1非空,root2空,则把root1当前的根节点全都给到新树的对应根节点上。原创 2022-11-26 00:18:17 · 352 阅读 · 0 评论 -
Leetcode111. 二叉树的最小深度 Minimum Depth of Binary Tree - Python 递归法
注意此题与014.二叉树的最大深度相似,但不能直接吗max()改成min()最后一种,左右都空,会作为结束递归条件,返回0,不会到达上述逻辑判断这一步。什么是叶子节点,左右孩子都为空的节点才是叶子节点!所以在得到子树的深度后,需要判断一下,有如下情况。依次判断左右子树深度法,递归法。原创 2022-10-12 12:05:28 · 141 阅读 · 0 评论 -
Leetcode559. N 叉树的最大深度 Maximum Depth of N-ary Tree - Python 递归法
【代码】559. N 叉树的最大深度 Maximum Depth of N-ary Tree - Python 递归法。原创 2022-10-11 14:15:44 · 82 阅读 · 0 评论 -
Leetcode101. 对称二叉树 Symmetric Tree - Python 递归法
【代码】101. 对称二叉树 Symmetric Tree - Python 递归法。原创 2022-10-11 12:15:18 · 137 阅读 · 0 评论 -
Leetcode589. N 叉树的前序遍历 N-ary Tree Preorder Traversal - Python 迭代法
注意需要依次遍历孩子节点。原创 2022-10-10 23:36:28 · 63 阅读 · 0 评论 -
Leetcode226. 翻转二叉树 Invert Binary Tree - Python - 迭代法层序遍历法
1.注意这是层序遍历;(也可用前序和后续遍历)其它与迭代层序遍历一样。2.除了# 关键一步。原创 2022-09-24 23:31:22 · 167 阅读 · 0 评论 -
Leetcode111. 二叉树的最小深度 Minimum Depth of Binary Tree - Python 以迭代法解题
这一步最重要 只需要:若判断左孩子和右孩子同时为空时,则返回当前depth。其它和层序遍历二叉树思路一致。原创 2022-09-24 22:39:01 · 142 阅读 · 0 评论 -
Leetcode104. 二叉树的最大深度 Maximum Depth of Binary Tree - Python 以迭代/递归法解题
注意全局变量self.res的使用,以及depth+1 因为深度和depth始终差1。同迭代层序遍历二叉树。原创 2022-09-24 17:48:06 · 122 阅读 · 0 评论 -
Leetcode117. 填充每个节点的下一个右侧节点指针 II Populating Next Right Pointers in Each Node II - Python 以迭代法解题
同Leetcode116。原创 2022-09-24 17:29:41 · 80 阅读 · 0 评论 -
Leetcode116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node - Python 以迭代法解题
遍历到每行非最后节点时,将cur.next指向queue[0], 注意这一步不能queue.popleft,否则就把下一层待遍历的孩子节点给弹出了。在遍历到每行最后一个节点时,break;把result和results都去掉;原创 2022-09-24 16:55:54 · 70 阅读 · 0 评论 -
Leedcode515.在每个树行中找最大值 Find Largest Value in Each Tree Row - Python 以迭代/递归法实现
【代码】Leedcode515.在每个树行中找最大值 Find Largest Value in Each Tree Row - Python 以迭代/递归法实现。原创 2022-09-24 16:09:35 · 71 阅读 · 0 评论 -
Leetcode429. N叉数的层序遍历 N-ray Tree Level Order Traversal - Python 以迭代法实现
2.将该层各根节点的孩子们,依次入deque,供下一轮while里的for遍历;与二叉树层序遍历不同的是,这里的孩子节点是由Node节点以列表的形式保存的。3.依次遍历在上一层加入到deque的孩子们;原创 2022-09-24 15:54:44 · 128 阅读 · 0 评论 -
Leetcode637. 二叉树的层平均值 Average of Levels in Binary Tree - Python 以递归/迭代算法实现
很简单,就等于层序遍历二叉树。原创 2022-09-24 14:45:21 · 654 阅读 · 0 评论 -
Leetcode102. 二叉树的层序遍历 Binary Tree Level Order Traversal - Python 以递归/迭代算法实现
2.函数体具体操作:当遇到新层,则添加[];遇到父节点就将root.val输出;然后分别将左孩子、右孩子依次用遍历父节点一样的方式(递归的方式)遍历孩子节点。3.递归终止条件: #实际上该递归的结束条件为 root.left == None 和 root.right == None。1.调用函数参数:root,depth-当前深度。原创 2022-09-23 22:00:04 · 141 阅读 · 0 评论 -
Leetcode145. 二叉树的后序遍历 Binary Tree Postorder Traversal - Python 以递归/迭代算法实现
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置。注意traversal函数的函数参数:root根节点。注意结束递归条件:当root == None。原创 2022-09-21 23:28:57 · 181 阅读 · 0 评论 -
Leetcode94. 二叉树的中序遍历 Binary Tree Inorder Traversal - Python 以递归/迭代算法实现
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置。注意traversal函数的函数参数:root根节点。注意结束递归条件:当root == None。原创 2022-09-21 23:23:21 · 164 阅读 · 0 评论 -
Leetcode144. 二叉树的前序遍历 Binary Tree Preorder Traversal - Python 以递归/迭代算法实现
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置。注意traversal函数的函数参数:root根节点。注意结束递归条件:当root == None。原创 2022-09-21 22:49:07 · 264 阅读 · 0 评论 -
Leetcode239. 滑动窗口最大值 Sliding Window Maximum - Python 以单调队列实现
注意理解 在压入新元素时,如果待压入元素比当前队列中的元素都大,(必须是>,>=不能通过某些示例) 则需要把队列中的元素都踢出去。这样的话才能保证最大的元素始终在单调队列的左出口。注意理解 只有当待踢出元素==单调队列最左边元素时,才真正将单调队列最左边元素踢出。其它情况下,待提出元素在push函数中,已经被踢出去了,不需要再踢一次。注意理解 1.单调队列是从右至左单调递减或递增的,此处是递减。2.单调队列最右边的出口始终是滑动窗口中最大的元素。原创 2022-09-13 10:47:21 · 324 阅读 · 0 评论 -
Leetcode150. 逆波兰表达式求值 Evaluate Reverse Polish Notation - Python 以栈实现
class Solution: def evalRPN(self, tokens: List[str]) -> int: stack = [] for i in tokens: if i in {"+","-","*","/"}: last = stack.pop() first = stack.pop() .原创 2022-03-30 11:14:00 · 1089 阅读 · 0 评论 -
Leetcode 剑指 Offer 05. 替换空格 LCOF - Python
class Solution: def replaceSpace(self, s: str) -> str: counter = s.count(' ') res = list(s) res.extend([' ']*counter*2) front = len(s)-1 rear = len(res)-1 while front >= 0: if res[front.原创 2022-03-22 15:02:34 · 509 阅读 · 0 评论 -
Leetcode 541.反转字符串II Reverse String II - Python
class Solution: def reverseStr(self, s: str, k: int) -> str: remain = len(s) res = list(s) def swap(front:int,rear:int) -> str: while front < rear: res[front], res[rear] = res[rear], res[fro.原创 2022-03-21 23:00:05 · 249 阅读 · 0 评论 -
Leetcode 344.反转字符串 Reverse String - Python
class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ front = 0 n = len(s) rear = n - 1 for i in range(n): if fr.原创 2022-03-21 18:13:11 · 274 阅读 · 0 评论 -
Leetcode 18.四数之和 4Sum - Python 双指针法
class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: result = [] nums.sort() length = len(nums) for i in range(length-3): if i == 0 or nums[i] != nums[i-1]: #当nums[i]与nums[.原创 2022-03-02 12:16:55 · 334 阅读 · 0 评论 -
双指针法为什么不适用于Leetcode 1.Two Sum 两数之和? - Python
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: result = [] nums.sort() for i in range(len(nums)): front = i rear = len(nums)-1 while front < rear: .原创 2022-02-28 21:49:34 · 178 阅读 · 0 评论 -
Leetcode 15. 三数之和 3Sum - Python 双指针法
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: result = []#将数组从小到大排序,便于双指针法的实施 nums.sort() for i in range(len(nums)): if i == 0 or nums[i] != nums[i-1]: #第一个元素 或 跟前一个i不相同的i才能进入(去重) .原创 2022-02-28 21:25:49 · 350 阅读 · 0 评论 -
Leetcode 383. 赎金信 Ransom Note - Python 哈希法
class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: hash = [0] *26 for c in magazine: hash[ord(c)- ord('a')] += 1 for c in ransomNote: if hash[ord(c)-ord('a')] == .原创 2022-02-28 12:09:34 · 269 阅读 · 0 评论 -
Leetcode 454. 四数相加 II 4Sum II - Python 哈希法
class Solution: def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int: hash = dict()#统计nums1和nums2所有potential sum 的次数,将其放到哈希表中 for n1 in nums1: for n2 in nums2: .原创 2022-02-28 11:38:31 · 167 阅读 · 0 评论 -
Leetcode 1.两数之和 Two Sum - Python 哈希法
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: pool = dict() for idx, num in enumerate(nums): if target - num not in pool: pool[num] = idx else: r.原创 2022-02-28 10:44:56 · 312 阅读 · 0 评论 -
Leetcode 202. 快乐数 Happy Number - Python 哈希法
class Solution: def isHappy(self, n: int) -> bool: sum_pool = set() num = str(n) sum = 0 while sum != 1: sum = 0 for i,c in enumerate(num): sum += pow(int(c),2) if.原创 2022-02-28 10:21:59 · 226 阅读 · 0 评论 -
Leetcode 349.两个数组的交集 Intersection of Two Arrays - Python 哈希法
class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: return list(set(nums1).intersection(set(nums2)))当数值较大时,用数组做哈希表是不明智的选择。此时可以选择set集合数据结构了。set的元素是无序的,不可更改的,无索引下标的。详情看Python Set 的W3School具体介绍...原创 2022-02-27 23:00:02 · 282 阅读 · 0 评论 -
Leetcode 1002. 查找共用字符 Find Common Characters - Python 哈希法
class Solution: def commonChars(self, words: List[str]) -> List[str]: if not words : return [] result = [] hash = [0]*26#记录数组中第一个字符串各字母出现频率 for i, c in enumerate(words[0]): hash[ord(c)-ord('a')] += 1#记录.原创 2022-02-26 23:20:00 · 289 阅读 · 0 评论 -
Leetcode 9. 回文数 Palindrome Number - Python 双指针法
class Solution: def isPalindrome(self, x: int) -> bool: to_string = str(x) i = 0 q = len(to_string)-1 front = to_string[i] rear = to_string[q] while front == rear: if i==q or abs(i-q)=.原创 2022-02-26 13:57:47 · 359 阅读 · 0 评论 -
Leetcode 242. 有效的字母异位词 Valid Anagram - Python 哈希法
class Solution: def isAnagram(self, s: str, t: str) -> bool: record = [0] *26 for i in s:# 用哈希法( 哈希函数:ord(i)-ord('a') )将'a'映射为0 'b'映射为1..'z'映射为25 其它字母同理 record[ord(i)-ord('a')] += 1 #此处不用记住ASCII 用ord()计算即可 f.原创 2022-02-25 21:15:19 · 233 阅读 · 0 评论 -
Leetcode 24. 两两交换链表中的节点 Swap Nodes in Pairs - Python
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def swapPairs(self, head: ListNode) -> ListNode: sentinalNode = ListNode(.原创 2022-02-24 15:42:16 · 366 阅读 · 0 评论 -
Leetcode 206. 反转链表 Reverse Linked List - Python 迭代法
class Solution: def reverseList(self, head: ListNode) -> ListNode: pre = None cur = head while cur != None: temp = cur.next cur.next = pre pre = cur cur = temp .原创 2022-02-24 14:21:53 · 235 阅读 · 0 评论