自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奥古斯都

一万年太久 只争朝夕

  • 博客(35)
  • 收藏
  • 关注

原创 《Leetcode》841.钥匙和房间(无向图的连通性)

题目链接:841.钥匙和房间class Solution: def canVisitAllRooms(self, rooms: List[List[int]]) -> bool: if not rooms: return True #DFS def dfs(x): vis.add(x) for it in rooms[x]: .

2020-08-31 21:07:50 195

原创 反转字符串/反转字符串II/反转字符串中的单词

题目链接:344.反转字符串541.反转字符串II557.反转字符串中的单词1、反转字符串class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ i,j = 0,len(s)-1 while i<j:

2020-08-30 20:16:14 186

原创 查找无向图得连通分量:547.朋友圈

题目链接:朋友圈如果A认识B,B认识C,C认识D,那么就说明A认识C。我把这种方法称为顺藤摸瓜法。如果把这种关系放在图里面,也就是一个图有几条联通分量的题目,所以可以用两个方法来求解:1、DFS 2、BFS;DFS这个方法更好理解一些,每次摸一个瓜就给它标注一次,如果DFS摸瓜结束那就进行重新遍历。可以把给定的二维数组看作是邻接表。class Solution: def findCircleNum(self, M: List[List[int]]) -> int: .

2020-08-28 10:32:03 181

原创 回溯算法模板之:332. 重新安排行程

题目链接:332.重新安排行程分析:需要重新排列行程,并且需要按照自然排序的大小,所以第一步就先进行字典的创建,key是起始地,value是可到达所有的目的地,然后对value进行排序。使用回溯算法进行搜索,这下面有一个回溯的模板:回溯模板backtracking() { if (终止条件) { 存放结果; } for (枚举同一个位置的所有可能性,可以想成节点孩子的数量) { 递归,处理节点; backtracking

2020-08-27 16:45:14 166

原创 《Leetcode》459. 重复的子字符串

题目链接:459.重复的子字符串28. 实现 strStr()class Solution: def strStr(self, haystack: str, needle: str) -> int: if not needle: return 0 size=len(needle) for i in range(len(haystack)-size+1): if haystack[i

2020-08-24 21:28:51 133

原创 位运算:201.数字范围按位与

5 01016 01107 0111其实公共前缀就是01class Solution: def rangeBitwiseAnd(self, m: int, n: int) -> int: shift=0 while m<n: m>>=1 n>>=1 shift+=1 return m<<shift总结:一...

2020-08-23 17:33:53 164

原创 判定字符串的问题:面试题01.01.字符串是否唯一、是否可以重排

class Solution: def isUnique(self, astr: str) -> bool: #return len(set(astr))==len(astr) #位运算 mark = 0 for i in astr: #移动的位数 move = ord(i)-ord('a') #如果移动后与mark取与运算不等于0,那就说明有相同...

2020-08-22 11:27:19 205

原创 二叉树的自底向上遍历+hash表:508.出现次数最多的子树元素和

题目链接:508.出现次数最多的子树元素和# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def findFrequentTreeSum(self, root: TreeN.

2020-08-19 17:20:28 166

原创 剑指 Offer 26. 树的子结构

题目链接:树的子结构这个截图来自题解区,我觉得画的比较好,就没有画直接借鉴的,链接如下:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/mian-shi-ti-26-shu-de-zi-jie-gou-xian-xu-bian-li-p/# Definition for a binary tree node.# class TreeNode:# def __init__(self, x..

2020-08-19 16:40:26 92

原创 中心扩散法:647.回文子串

题目链接:647.回文子串class Solution: def countSubstrings(self, s: str) -> int: if not s: return 0 #扩散函数 def spread(l,r): count=0 while l>=0 and r<=len(s)-1 and s[l]==s[r]: ..

2020-08-19 10:48:34 274

原创 剑指 Offer 24. 反转链表​​​​​​​ 

题目链接:剑指 Offer 24. 反转链表递归实在没看明白,就写一个迭代吧。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseList(self, head: ListNode) -> ListNode:..

2020-08-18 22:13:51 95

原创 中序遍历构建AVL树:109.有序链表转换二叉搜索树

题目链接:109.有序链表转换二叉搜索树画图表示一下:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = next# Definition for a binary tree node.# class TreeNode:# def __i.

2020-08-18 21:19:01 334

原创 快慢指针法:876.链表的中间节点

题目链接:876.链表的中间结点# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def middleNode(self, head: ListNode) -> ListNode: if not head:..

2020-08-18 20:50:32 213

原创 二叉树的迭代排序:230. 二叉搜索树中第K小的元素

题目链接:230.二叉搜索树的第K小的元素两个做法:一个是递归,一个是迭代;# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: .

2020-08-18 11:32:48 98

原创 中序遍历的迭代法:173. 二叉搜索树迭代器

题目链接:173. 二叉搜索树迭代器# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass BSTIterator: def __init__(self, root: TreeNode): se

2020-08-18 11:15:39 139

原创 二叉树的三种遍历:前序遍历、后序遍历、中序遍历

题目链接:145.二叉树的后序遍历94.二叉树的中序遍历144.二叉树的前序遍历1、后序遍历主要想说这个题目和N叉树一样,用了一个迭代的方法去解决。二叉树的后续是左、右、根。利用栈的数据结构,进行根、右、左的遍历。然后把最终遍历的结果进行反转就可以了。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x#

2020-08-17 22:24:16 451

原创 N叉树的三种遍历:层次遍历、前序遍历、后序遍历

题目链接:1、层次遍历"""# Definition for a Node.class Node: def __init__(self, val=None, children=None): self.val = val self.children = children"""class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: .

2020-08-17 21:16:53 4122

原创 层次遍历模板的应用之:111.二叉树的最小深度

题目链接:111.二叉树的最小深度1、题目分析最小深度和最大深度是刚好反着来的,注意一点:最小深度是跟节点到叶子节点的深度,如果根节点的左子树或者右子树为空,那么左右子树为空的时候根本不符合题目要求,因此必做一个筛选。两个方法:①递归②层次遍历2、解题分析递归 如果左子树为空就直接遍历右子树 如果右子树为空就直接遍历左子树 如果都不为空,比较两个取最小值+1即可 遍历 BFS模板 使用一个临时变量去记录深度 如果一个节点的左右子树都为空,就返回当前深度 3、代码

2020-08-17 15:34:37 208

原创 辅助栈之:剑指Offer59-II.队列的最大值

题目链接剑指 Offer 59 - II. 队列的最大值1、题目分析题目比较清晰,操作需要在O(1)的时间复杂度完成,分别是入队,出队,取队列的最大值。不能用单一变量取存最大值,如果第一个值是5,那么它出队以后,最大值需要改变,单一变量显然不能完成这个任务。需要使用数组去记录下这个最大值,而且如果入队的元素是大于最大数组的最后一个元素,那就一直出队,直到最大数组中的元素是大于入队的元素;出队的时候如果出队的元素是等于最大数组中的一个元素,那么最大数组的第一个元素也随之出队。2、解题分析初始化

2020-08-15 19:48:49 137

原创 括号问之:20有效的括号

题目链接20.有效的括号1、题目分析字符串只有三种类型的括号,如果先有右括号一定不是有效的,如果每一个左括号都能匹配到右括号就算成功。2、解题分析初始话一个字典,包含三个键值对,就是三队括号 初始化两个字符串,一个包含左括号,一个包含右括号 进行for循环遍历 如果是左括号直接添加到辅助栈 如果是右括号且辅助站是空直接返回Fasle 如果右括号与栈顶元素匹配就弹出栈顶元素 否则返回Fasle 循环结束判断一下辅助栈是否为空 如果为空,为所有的左括号找到了右括号

2020-08-14 21:18:15 332

原创 图的遍历:133.克隆图

题目:133.客隆图1、题目分析克隆一张图,并且是深度拷贝;深度拷贝就是有新的引用,节点的关系和值都是一样的,只不过是每个节点的引用是不一样的。明天找机会重新复习一下深度和浅度拷贝。2、解题分析初始话一个队列,将node添加到队列中去 初始化一个hash表,key是节点,value是它的相邻节点 进行BFS遍历 如果邻居节点不在hash中,将新的节点添加到hash中 如果邻居节点在hash中,就更新节点的邻居节点 返回new的图结构,也就是图的深度拷贝了3、代码"""

2020-08-12 20:23:58 117

原创 广度优先遍历之:130.被围绕的区域

给定一个二维的矩阵,包含'X'和'O'(字母 O)。找到所有被'X'围绕的区域,并将这些区域里所有的'O'用'X'填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X1、题目分析题目的要求比较简单了,就是如果X把O都围起来,那么就把围起来的O都变成X。如果没有被围,那么原定的O不会变。从题目的角度来分析,我们其实需要从最外面的四条边来出发,如果四条边都是...

2020-08-11 22:12:24 247

原创 99.恢复二叉搜索树

二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例1:输入: [1,3,null,null,2] 1 /3 \ 2输出: [3,1,null,null,2] 3 /1 \ 2示例2:输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,null,null,3] 2 / \1 4 / 31、题目分析二叉搜...

2020-08-08 12:19:12 221

原创 判断两个二叉树是否相同的模板:100.相同的树

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2.

2020-08-08 11:16:31 242

原创 剑指 Offer 56 - II. 数组中数字出现的次数 II

在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:11、题目分析这个题的简单版本就是其它数字都出现了两次,找出出现一次的那个数字。这个比较简单明了,直接对数组中所有的元素进行与或运算就得了,但是对于出现三次就无法解决了。对于这个问题来说,可以有两种解决办法:①hash表②位运算;对于位运算我们可以看如下的图:..

2020-08-06 17:01:56 201

原创 剑指 Offer 34. 二叉树中和为某一值的路径

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2], [.

2020-08-06 16:41:18 75

原创 动态规划之:打家劫舍II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 2.

2020-08-05 11:33:48 156

原创 动态规划之:198.打家劫舍I

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入.

2020-08-05 10:39:48 171

原创 拓朴排序模板:207.课程表

你这个学期必须选修 numCourse 门课程,记为0到numCourse-1 。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: fa...

2020-08-04 17:38:01 133

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5...

2020-08-04 17:24:16 73

原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 ...

2020-08-03 19:12:42 75

原创 进位相加:415. 字符串相加

给定两个字符串形式的非负整数num1 和num2,计算它们的和。注意:num1 和num2的长度都小于 5100.num1 和num2 都只包含数字0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。1、题目分析题目非常简单,给定两个数字的字符串计算加法,然后返回相加后结果字符串。问题的关键在于两个:1、如何处理两个长度不同的字符串;2、如何处理进位问题。2、解题分析先计算出来两个字符...

2020-08-03 19:00:15 200

原创 中序遍历二叉搜索树:剑指 Offer 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 41、题目分析首先明白什么是二叉搜索树,这个树的特点就是每个节点的左子树小于根节点,右子..

2020-08-02 18:52:01 164

原创 非原地操作:114.二叉树展开为链表

给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 61、题目分析将一个二叉树给它拆开,拆成链表。其实这个题目要求是原地操作,也就是时间复杂度是O(1)。但是原地操作我没看明白,所以用了一个O(n)的方法去解决这个问题。可以进行先序...

2020-08-02 17:37:56 148

原创 AVL:剑指 Offer 55 - II. 平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4

2020-08-02 16:04:24 142

空空如也

空空如也

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

TA关注的人

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