
力扣刷题笔记
呀是Anna
这个作者很懒,什么都没留下…
展开
-
力扣98.验证二叉搜索树——Python版
题目:98.验证二叉搜索树思路:递归代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution(object): pre原创 2022-05-24 22:02:04 · 1243 阅读 · 0 评论 -
力扣17.电话号码的字母组合——python版
巴拉巴拉又开始刷题了,进入正题题目:17. 电话号码的字母组合思路:深度优先搜索(DFS)代码:class Solution(object): def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ if not digits: return []原创 2022-05-23 21:13:52 · 464 阅读 · 0 评论 -
力扣300.最长递增子序列(python版本)——DP
# 题目# https://leetcode.cn/problems/longest-increasing-subsequence/# 参考链接# https://blog.youkuaiyun.com/anan15151529/article/details/118162225# 题解# https://leetcode.cn/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-dong-tai-g原创 2022-05-10 22:08:25 · 226 阅读 · 0 评论 -
力扣705. 设计哈希集合
class MyHashSet(object): def __init__(self): self.arr = list() def add(self, key): """ :type key: int :rtype: None """ arr = self.arr if key not in arr: arr.append(key) def原创 2022-03-23 15:56:53 · 217 阅读 · 0 评论 -
力扣621.任务调度器(python)
python代码如下class Solution(object): def leastInterval(self, tasks, n): """ :type tasks: List[str] :type n: int :rtype: int """ if n == 0: return len(tasks) from collections import Count原创 2022-03-22 21:34:00 · 760 阅读 · 0 评论 -
堆排序(python)
代码如下,结合b站视频和《大话数据结构》9.7章内容终于看懂了,代码还是比较简洁容易理解的。# -*- ecoding: utf-8 -*-# @ModuleName: # @Function: # @Author: Zz# @Time: 2022/3/22 10:34def sort(array): # 遍历非叶子结点,简历堆结构数组 for i in range((int(len(array) / 2))-1, -1, -1): adjustHeap(arra原创 2022-03-22 11:32:41 · 1273 阅读 · 0 评论 -
力扣128.最长连续序列
并查集总结(python)原创 2022-03-19 15:25:16 · 273 阅读 · 0 评论 -
力扣421.数组中两个数的最大异或值
python代码:class BitTrie(object): def __init__(self): self.root = {} def insert(sef, nums): node = sef.root for i in range(30,-1,-1): d = (nums>>i) & 1 node = node.setdefault(d, {}) def q原创 2022-03-18 14:29:57 · 952 阅读 · 0 评论 -
【转载】数据结构(Python实现)------前缀树
数据结构(Python实现)------前缀树原创 2022-03-18 08:49:17 · 529 阅读 · 0 评论 -
力扣617.合并二叉树(python)
题目来源: 617.合并二叉树思路:递归 利用递归的方法,如果左右结点存在,则新结点为左右结点之和,若不存在,则返回存在的左右结点。python代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left#原创 2022-03-15 15:06:23 · 954 阅读 · 0 评论 -
力扣538.把二叉搜索树转换为累加树
题目来源: 538.把二叉搜索树转换为累加树题目: 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。注意:本题和 1038: https://leetcode-cn.com/problems/binary-sea原创 2022-03-15 10:25:33 · 171 阅读 · 0 评论 -
力扣437.路径总和III(python)
题目来源: 437.路径总和III题目: 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。思路: 本质在于是否将当前结点作为起点,若作为起点,则继续往前走,直至遍历到路径和为止。若不往前走,依次遍历左右子树,判断其是否作为起点,循环往复,直至找到路径和。python代码:# Definition for a原创 2022-03-15 09:00:57 · 370 阅读 · 0 评论 -
力扣337.打家劫舍III
题目来源: 337.打家劫舍III题目: 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。思路:动态规划 通过后续遍历的方法,每次寻找到当前结点的最优值,接着依次遍历二叉树,得到最终原创 2022-03-14 21:29:04 · 416 阅读 · 0 评论 -
力扣236.二叉树的最近公共祖先(python实现)
题目来源: 236.二叉树的最近公共祖先题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”思路:递归如果根结点为空,或者根结点等于p或q,则根结点即为其最近公共祖先。如果根结点不为空,递归调用根结点的左右子树如果左子树为空,说明p和q不在左子树中,则返回右子树。如果右子树为空,说明p和q不原创 2022-03-14 17:05:54 · 1245 阅读 · 0 评论 -
力扣114.二叉树展开为链表(python版本)
题目来源: 114.二叉树展开为链表题目: 给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。思路:递归给 flatten 函数输入一个结点 root ,那么以 root 为根的二叉树就会被拉平成一条链表。如何按照题目把一颗树拉平成一条链表?以下流程:1、将 root 的左子树和右子树拉平。2、将 root原创 2022-03-14 16:09:45 · 1907 阅读 · 0 评论 -
力扣105.从前序与中序遍历序列构造二叉树
题目来源: 105.从前序与中序遍历序列构造二叉树题目: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。思路:python代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):#原创 2022-03-14 10:21:26 · 1258 阅读 · 0 评论 -
力扣102.二叉树的层序遍历
题目来源:102.二叉树的层序遍历题目: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。思路: 二叉树的遍历包括深度优先遍历(DBS)和广度优先遍历(BFS),深度优先遍历包括前序遍历、中序遍历、和后续遍历。广度优先遍历即层序遍历。层序遍历跟队列有着密不可分的关系,利用队列先进先出、后进后出的思想,首先将二叉树的头结点放到队列中,接着将头结点弹出,随后将头结点的左右孩子加入队列中,将头结点存入到队列后,接着将左孩子弹出,随后将左孩子的左右孩子依次加原创 2022-03-12 20:57:34 · 590 阅读 · 0 评论 -
力扣98.验证二叉搜索树
题目来源:98.验证二叉搜索树题目:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:中序遍历看到左结点要小于根结点,右结点要大于根结点马上想到可能跟中序遍历有关,看了一下答案果真是,刷题又进步了一步,可以自己想出思路了,哦耶题目所给的条件跟中序遍历的规则很相似,因此只要保证中序遍历后得到的数组是严格升序的即可,即五原创 2022-03-12 16:18:41 · 7707 阅读 · 0 评论 -
力扣96.不同的二叉搜索树
题目来源:96.不同的二叉搜索树给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。思路:动态规划给定有序数列1:n,当搜索子树的数量时,假设以i为根的二叉搜索树个数为f(i);给定n个结点能构成的二叉搜索数个数为G(n);则G(n)=f(0)+f(1)+f(2)+…+f(n)分别代表【以第1个结点为根结点:前0个结点在左,后n-1个结点在右计算子树个数;以第2个结点为根结点:前1个结点在左,后n-2个结点在右计算子原创 2022-03-12 15:39:40 · 6254 阅读 · 0 评论 -
力扣581.最短无序连续子数组
题目给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入的数组可能包含重复元素 ,所以升序的意思是<=。解法一:使用排序,然后将排序后的数组与排序前对比,找到最原创 2022-02-28 21:06:55 · 147 阅读 · 0 评论 -
力扣160.相交链表双指针python
160.相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表ski原创 2022-03-01 09:36:10 · 276 阅读 · 0 评论 -
力扣75.双指针颜色分类(Python)
75.颜色分类题目:给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。解法:方法一:双指针(两遍循环)我们可以考虑对数组进行两次遍历。在第一次遍历中,我们将数组中所有的 0交换到数组的头部。在第二次遍历中,我们将数组中所有的 1交换到头部的 0之后。此时,所有的 2 22 都出现在数组的尾部,这样我原创 2022-03-01 15:59:34 · 257 阅读 · 0 评论 -
力扣148.排序链表
题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def sortList(self, head):原创 2022-03-08 17:27:19 · 197 阅读 · 0 评论 -
力扣20.有效的括号
思路:检查括号配对的原则如下:在扫描正文的过程中,遇到的闭括号应该与此前最近遇到且尚未获得匹配的开括号配对。如果最近未匹配的开括号与当前闭括号不配对,或者找不到这样的开括号,就是匹配失败,说明这段正文里的括号不匹配。由于括号的出现可能嵌套,需要逐对匹配:当前闭括号应当与前面最近的尚未匹配的开括号匹配,下一个括号应当与前面次近的括号匹配。这说明需要存储的开括号的使用原则是后存入者先使用,符合LIFO原则。进而,如果一个符号已配对,就应该删除这个括号,为随后的匹配做好准备。显然,在扫描的过程中,后遇到并保原创 2022-03-10 16:27:16 · 132 阅读 · 0 评论 -
字符串的无重复字符的最大长度求解(python实现)之双指针法
转载文章:字符串的无重复字符的最大长度求解(python实现)之双指针法原创 2022-03-10 16:41:43 · 251 阅读 · 0 评论 -
力扣394.字符串解码(Python实现)
转载:力扣394.字符串解码(Python实现原创 2022-03-10 16:58:06 · 276 阅读 · 0 评论 -
Python实现“最小栈“的两种方法
转载Python实现"最小栈"的两种方法原创 2022-03-10 17:16:38 · 366 阅读 · 0 评论 -
力扣739.每日温度
参考:力扣739.每日温度代码:class Solution(object): def dailyTemperatures(self, temperatures): """ :type temperatures: List[int] :rtype: List[int] """ stack = [] ans = [0 for _ in temperatures] for i,item原创 2022-03-10 19:45:38 · 135 阅读 · 0 评论 -
力扣104.二叉树的最大深度
二叉树的最大深度题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree思路利用递归的思想,首先遍历左右子树,求出左右子树最大的深度+1(根结点)即为数的最大深度,反原创 2022-03-12 11:15:35 · 176 阅读 · 0 评论 -
力扣226.反转二叉树
题目:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。思路:因为刚做完对称二叉树,最开始想的是先把左结点的左孩子与右结点的右孩子交换,左结点的右孩子与右结点的左孩子交换,但是可能是编程不熟悉的原因报错了。后来看了一下答案,发现这么做也一样,最后找到来留一个简洁些的代码,思路是先把左子树的左右结点交换,然后把右结点的左右结点交换,最后把左右子树进行交换,最终返回根结点。但是后来发现先交换左右结点再做左子树的左右结点交换和右结点的左右交换是一样的(先执行第16行代码和后执行一样)。原创 2022-03-12 12:14:22 · 443 阅读 · 0 评论