![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
伯爵er
这个作者很懒,什么都没留下…
展开
-
二叉树公共父节点
二叉树公共父节点# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeN原创 2022-05-02 23:13:32 · 460 阅读 · 0 评论 -
求二叉树某一节点出现次数
求某一节点的值在所有路径当中的最大值。先求出路径,路径即是二叉树中跟节点到叶子节点所有路径。# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def getMaxNumInAllPath(self, root,原创 2021-04-26 02:51:21 · 432 阅读 · 0 评论 -
KMP算法
好记忆的KMP算法: i a b c a b dnext 0 0 0 1 2 0 t#构建next数组array = ['a','b','c','a','b','d']next = [0] * len(array)i = 1t = 0while i < len(array): if array[i] == array[t]: next[i] = t + 1 i += 1 t += 1 elif t&g原创 2020-06-08 17:53:49 · 173 阅读 · 0 评论 -
leetcode 209.长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。class Solution: def minSubArrayLen(self, s: int, nums: List[int]) -> int: #j和i一起从0可是跑原创 2020-06-01 11:43:39 · 128 阅读 · 0 评论 -
面试题 08.09. 括号
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。例如,给出 n = 2,生成结果为:[“(())”,“()()”]算法步骤:前提:p,q分别代表左括号,右括号数量.1.出现一个’(‘消耗一个p数量;出现一个’)'消耗一个q数量2.当p>q的时候说明消耗右括号的数量多于左括号的数量。会出现())、)这种情况.3.当q...原创 2020-04-06 13:39:59 · 226 阅读 · 0 评论 -
17. 电话号码的字母组合
思路:回溯法class Solution: def letterCombinations(self, digits): if not digits: return [] phone = {'2':['a','b','c'], '3':['d','e','f'], ...原创 2020-04-05 23:48:25 · 133 阅读 · 0 评论 -
买卖股票的最佳时机I,II,III
121.给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。两种方法:1.暴力法2.一次遍历先求最小值当前值减去最小值是否是当前最大利润class Solution: #暴力法 def maxProfitAll(self, prices): ...原创 2020-04-03 12:34:45 · 159 阅读 · 0 评论 -
面试题 08.05. 递归乘法
递归实现乘法。class Solution: def multiply(self, A: int, B: int) -> int: #for i in range(B): sum = 0 if B>1: sum = self.multiply(A, B-1) + A else: ...原创 2020-03-31 15:23:09 · 172 阅读 · 0 评论 -
面试题 08.01. 三步问题
青蛙一次可以走1,2,3个阶梯,那如果有n个阶梯有多少种走法?思路:f(n)=f(n-1)+f(n-2)+f(n-3)class Solution: def waysToStep(self, n: int) -> int: if n < 3: return n first, second, third = 1, 2,...原创 2020-03-30 20:33:29 · 118 阅读 · 0 评论 -
面试题10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路:青蛙第一次跳的时候有两种跳法:跳一阶,跳两阶。如果跳一阶:剩下的跳法等于后面n-1阶的跳法数。如果跳两阶:剩下的跳法等于后面n-2阶的跳法数。即:f(n) = f(n-1) + f(...原创 2020-03-30 19:11:21 · 172 阅读 · 0 评论 -
100. 相同的树
示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2 ...原创 2020-03-29 18:43:51 · 76 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路:这种按层次遍历的做法,需要在广...原创 2020-03-29 11:37:31 · 111 阅读 · 0 评论 -
654. 最大二叉树
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 / \ 3 ...原创 2020-03-28 20:58:46 · 112 阅读 · 0 评论 -
445. 两数相加 II
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -...原创 2020-03-25 21:48:48 · 122 阅读 · 0 评论 -
543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。算法迭代过程...原创 2020-03-25 21:16:57 · 162 阅读 · 0 评论 -
257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3算法一:BFSclass TreeNode: def __init__(s...原创 2020-03-25 11:57:16 · 171 阅读 · 0 评论 -
994. 腐烂的橘子
在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。class Solution: def orangesRotting(self, grid: List[Lis...原创 2020-03-24 11:34:09 · 87 阅读 · 0 评论 -
112. 路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...原创 2020-03-23 10:44:48 · 73 阅读 · 0 评论 -
199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def rightSideView(s...原创 2020-03-22 23:48:37 · 75 阅读 · 0 评论 -
迪杰斯特拉算法
import heapqgraph = { "A": {"B": 5, "C": 1}, "B": {"A": 5, "C": 2, "D": 1}, "C": {"A": 1, "B": 2, "D": 4, "E": 8}, "D": {"B": 1, "C": 4, "E": 3, "F": 6}, "E": {"C": 8, "D": 3}, ...原创 2020-03-22 13:21:24 · 118 阅读 · 0 评论 -
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.思路:本题求的是根节点到叶子节点的最小深度。1.当当前节点左右子树有一个为空,应该返回...原创 2020-03-18 21:17:33 · 112 阅读 · 0 评论 -
面试题54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。示例 :输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4思路:二叉搜索树本身是有序的,最右边节点值最大。所以采用中序(这里是右中左)遍历的方法,从右往左,从大到小数数。# Definiti...原创 2020-03-18 13:06:00 · 112 阅读 · 0 评论 -
面试题36. 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。思路:中序遍历,其它技巧未掌握,后面多看几遍,看看有什么收获。本题带入三个节点的二叉树: 5 / \ 4 8结果如下: 5 // \\(s...原创 2020-03-17 18:42:20 · 96 阅读 · 0 评论 -
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的***二叉搜索树***。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 5 / \ 4 7 / \ 3 8输出: false思路:刚开始看半天没看懂,然后pycharm debug走了一下...原创 2020-03-17 00:04:22 · 116 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。思路:dfs(root)里面套dfs(root.left),dfs(root.right)就是dfs,递归出口是空节点。ans和path分别用来存储满足条件的path和path的过程。最好用PyCharm debug走一下过程即可。给定如下二叉树,以及目标和 s...原创 2020-03-16 00:04:21 · 106 阅读 · 0 评论 -
面试题32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]思路:该题用到BFS思想,其实跟BFS还是有些差别;因为BFS需要考虑邻接节点有没有被遍历。# Definition for a bi...原创 2020-03-14 23:53:02 · 92 阅读 · 0 评论 -
面试题27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1思路:DFS思想,遍历的目的是对当前左右子树进行交换,递归出口为空结点# Definition for a binary ...原创 2020-03-14 12:23:04 · 151 阅读 · 0 评论 -
110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7返回 true# Definition for a binary tree node.# class TreeNode:# ...原创 2020-03-13 21:01:27 · 105 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 :输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。1.动态规划思路:过去的最优值已经得到,用当前的最优值比较过去的最优值。class Solution: def lengthOfLongestSubstring(self, s: str) -> ...原创 2020-03-09 01:04:47 · 138 阅读 · 0 评论 -
215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。class Solution(o...原创 2020-03-07 22:01:41 · 82 阅读 · 0 评论 -
3Sum and 2Sum
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。class Solution(object): def threeSum(self, nums): """ :type nums: List[int] ...原创 2020-03-06 12:23:00 · 124 阅读 · 0 评论 -
557. 反转字符串中的单词 III
反转字符串中的单词给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。class Solution(object): def reverseWords(self, s): """ :type s: str :rtype: str """ #1.首先做split,放进列表,然...原创 2020-03-04 21:35:43 · 122 阅读 · 0 评论 -
859. 亲密字符串
859. 亲密字符串给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。解:需要考虑3种情况:1.A与B的长度不同,或者A只有一个字符(不满足交换条件)2.当A与B相等的时候,如果A中有相同的字符x,交换x后不变3.如果不同的地方不等于2也不满足条件(1处交换后还是不同,3处及以上交换两个...原创 2020-03-03 23:44:32 · 126 阅读 · 0 评论 -
1.回文
回文前提:只考虑字母和数字情况方法一:我想到的方法,是先把数字和字母加入列表1;然后把列表1翻转赋值给列表2;最后比较一下列表1和列表2是否相等即可。class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ ...原创 2020-03-02 21:50:40 · 119 阅读 · 0 评论 -
杨辉三角java和python实现
java实现杨辉三角控制台输出: 1 1 1 1 2 1 1 3 3 11 4 6 4 11 4 6 4 1 1 3 3 1 1 2 1 1 1 1public class YangHuiTriangle { public static void main(String[] args) { printYanghui(5); } pub...原创 2020-01-04 22:00:11 · 100 阅读 · 0 评论