自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 课程表2

在DFS中,需用visit来记录顶点的访问情况,避免无限递归,这点是没有异议的,同时为了满足能判断环这个条件,用额外的onCycle来记录从某个点开始递归时的路径,这里由于并不需要关注路径,onCycle直接存True和False表示状态就好。采用回溯的思想,当一条递归线走完之后,将onCycle状态再恢复成False。这里给DFS增加了返回值,如果有环直接返回False,一旦出现环,从所有嵌套递归中立刻返回。拓扑排序实际上就是后序遍历的逆序输出,所以也可以在每个顶点该输出的地方,将其插入在结果集的第

2020-05-17 16:59:59 309

原创 课程表

深度优先遍历原理是通过 DFS 判断图中是否有环。算法流程:借助一个标志列表 flags,用于判断每个节点 i (课程)的状态:未被 DFS 访问:i == 0;已被其他节点启动的 DFS 访问:i == -1;已被当前节点启动的 DFS 访问:i == 1。对 numCourses 个节点依次执行 DFS,判断每个节点起步 DFS 是否存在环,若存在环直接返回 FalseFalse。DFS 流程;终止条件:当 flag[i】 == -1,说明当前访问节点已被其他节点启动的 DFS 访问,

2020-05-17 16:53:30 246

原创 二叉树的最近公共祖先(递归python)

递归算法由基线条件(也即是最基本的原子问题),和递归子问题构成。而基线条件保证了从上到下递归过程的结束。每步递归子问题递归到基线时,都会有返回值,返回值由下至上层层返回至当时递归的那一步。本题递归返回值本题中,基线问题返回None,或者返回root.左子树或右子树递归时,返回的也将会是None,或是root。其中root,可以是p或q。如果p在左子树,根的左子树返回p,如果p不在左子树,...

2020-05-03 20:46:03 504

原创 格雷编码

class Solution: def grayCode(self, n: int) -> List[int]: res, a = [0], 1 for i in range(n): for j in range(len(res) - 1, -1, -1): res.append(a + res[...

2020-04-19 18:26:26 178

原创 子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]来源:力扣(LeetCo...

2020-04-19 18:22:00 88

原创 136.只出现一次的数字

class Solution: def singleNumber(self, nums: List[int]) -> int: return 2*sum(set(nums))-sum(nums)

2020-04-12 16:35:38 89

原创 反转字符串

双指针class Solution:def reverseString(self, s: List[str]) -> None:“”"Do not return anything, modify s in-place instead.“”"# double pointeri,j = 0,len(s)-1while i<j:s[i],s[j] = s[j],s[i]i...

2020-04-05 18:37:55 85

原创 通配符匹配

动态规划dp[i][j]表示s到i位置,p到j位置是否匹配!初始化:dp[0][0]:什么都没有,所以为true第一行dp[0][j],换句话说,s为空,与p匹配,所以只要p开始为*才为true第一列dp[i][0],当然全部为False动态方程:如果(s[i] == p[j] || p[j] == “?”) && dp[i-1][j-1] ,有dp[i][j] = ...

2020-03-30 15:14:40 115

原创 7.整数反转

int(str(abs(x))[::-1]) 这句可以输出 x 的无符号的反转,先把整数转字符串,在把字符串反转,再把字符串转整数class Solution: def reverse(self, x: int) -> int: fuhao="" if(x<0): fuhao="-" x=-x ...

2020-03-29 17:44:51 76

原创 数组实现的循环双端队列

图解链接class MyCircularDeque: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the deque to be k. """ # 长度为k时占用k+1的空间,多出来的空间用来区分i...

2020-03-29 17:36:45 534

原创 239.滑动窗口最大值

看到这道题目首先想到的是新建一个数组a,然后用for循环把list中相应的元素赋值给数组a,然后用max函数输出最大值,但是超时了;最后老半天超时了。。。。。最后做的是用双指针,很容易懂,就不做解释了:class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: ...

2020-03-29 17:24:54 71

原创 加油站

g代表车内剩余油量在油箱的油不小于到下一站消耗的油时,才能开到下一个加油站g=上一站油箱剩余的油+这一站加的油cost【i】代表消耗的油for循环是模拟开车加油,if语句是判断是否可以到达下一个加油站:class Solution: def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int: ...

2020-03-29 10:26:03 110

原创 跳跃游戏

用a记录还能往前进多少格,每次进一a则为a-1和当前所处位置的值中的较大值。当a为0时,代表无法前进,返回False。反之则为Trueclass Solution: def canJump(self, nums: List[int]) -> bool: a=0 for i in range(len(nums)-1): a=...

2020-03-28 17:13:46 101

原创 贪心算法实现发放饼干

发放饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正...

2020-03-27 08:12:26 240

原创 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “...

2020-03-26 19:13:32 84

原创 恢复二叉搜索树

思路:用递归实现遍历遵循 Left->Node->Right 方向,即对左子节点进行递归调用,然后判断该节点是否被交换,然后对右子节点执行递归调用。class Solution: def recoverTree(self, root: TreeNode) -> None: """ Do not return anything, modi...

2020-03-24 19:27:56 59

原创 不同的二叉搜索树

看了很多题解都没有灵魂画手一个图解灵魂画手图解class Solution: def numTrees(self, n: int) -> int: G = [0]*(n+1) G[0], G[1] = 1, 1 for i in range(2, n+1): for j in range(1, i+1): ...

2020-03-23 15:57:40 89

原创 最小栈

运用python中的函数每次push比较一下,O(n)每次pop判断一下,是和不是要分开操作O(n)剩下俩都是O(1)class MinStack: def __init__(self): """ initialize your data structure here. """ self.data = [] ...

2020-03-22 16:57:17 60

原创 逆波兰表达式求值

利用栈的思想:如果是数字,则压入栈;若为符号,即执行“pop取栈顶 -> pop取新栈顶 -> 计算”操作。具体代码为class Solution: def evalRPN(self, tokens: List[str]) -> int: symbol = ["+","-","*","/"] List1 = [] i...

2020-03-22 16:43:07 115

原创 二叉树的中序遍历

其核心思想如下:标记节点的状态,新节点为treenode,已访问的节点为int。如果遇到的节点为treenode,则将其标记为int,然后将其右子节点、自身、左子节点依次入栈。如果遇到的节点为int,则将节点的值输出。class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: ...

2020-03-22 11:26:00 61

原创 二叉树的最大深度

解题思路:最长路径的深度=最长路径的叶结点数目,如果树只有一个结点,深度为1。如果有左右子树,则为左右的深度较大值加1。class Solution: def maxDepth(self, root: TreeNode) -> int: if not root: return 0 left = self.maxDepth(r...

2020-03-21 19:20:05 115

原创 对称二叉树

递归法class Solution: def isSymmetric(self, root: TreeNode) -> bool: if not root: return True def twoSym(left, right): if not left and not right: ...

2020-03-20 18:12:39 70

原创 相同的树

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

2020-03-19 09:05:10 63

原创 正则表达式匹配

正则表达式匹配题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 。示例 1:输入:s =...

2020-03-18 09:04:06 262

原创 最长回文子串

其实最简单的就是暴力法,但是python3会超时(也不知道出题人搞那么多a干啥)学习了中心扩展的方法,易懂,但我觉得不太容易操作(对于我这个菜鸟来说),当然,得知palindrome用法时就大概懂了,原来大部分代码时在限制条件,而回文确是一步到位。class Solution: def longestPalindrome(self, s: str) -> str: ...

2020-03-17 19:50:29 66

原创 无重复字符串的最长字串

无重复字符的最长子串难度中等给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为...

2020-03-16 19:29:45 86

原创 第20 题 有效括号 python

思路:字典储存对应括号遍历字符串:左括号入栈右括号分三种情况:1.若此时栈为空,直接返回False2.若此时右括号和栈顶左括号不匹配,直接返回False3.若此时右括号和栈顶左括号匹配,栈顶左括号出栈遍历结束后若栈为空栈,说明所有括号都匹配完成,返回True否则,返回Falseclass Solution: def isValid(self, s: str) -&gt...

2020-03-15 18:03:10 128

原创 14.最长公共前缀 python

学习了python中zip的用法:>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b) # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]>>> a = ["abc", "abd",...

2020-03-14 19:42:21 80

原创 罗马数字变阿拉伯数字

第一个是学习哈希表的做法解题思路通过观察我们发现,只有在遇到特殊情况时,两个字符中左边的字符小于右边的字符,且等于右边的字符代表的数减左边字符代表的数。 比如 CM 等于 1000 - 1001000−100,XC 等于 100 - 10100−10…因此,我们将 字符:数值 存在 Roman2Int 的哈希表中。然后从左到右遍历每个字符,如果 s[i] < s[i+1],就将结果减去...

2020-03-13 09:11:12 167

原创 合并k个链表

首先想到的是暴力法,搜索了部分函数,得到结果,发现效率也挺高。class Solution: def mergeKLists(self, lists: List[ListNode]) -> ListNode: self.nodes = [] head = point = ListNode(0)# 设置哨兵节点 for l in lis...

2020-03-12 15:40:44 165

原创 删除链表的倒数第N个节点 python

两次遍历算法思路我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)(L−n+1) 个结点,其中 LL 是列表的长度。只要我们找到列表的长度 LL,这个问题就很容易解决。算法首先我们将添加一个哑结点作为辅助,该结点位于列表头部。哑结点用来简化某些极端情况,例如列表中只含有一个结点,或需要删除列表的头部。在第一次遍历中,我们找出列表的长度 LL。然后设...

2020-03-11 08:45:21 619

原创 链表练习 两数相加 python

该链表练习是学习了题解里头的图解法,下面给出连接添加链接描述思路标签:链表将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 00,比如 987 + 23 = 987 + 023 = 1010每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值如果两个链表全部遍历完毕后,进位值为 11,则在新链表最前方添加节点 11小技巧:对于链表问题,返回结果为...

2020-03-10 15:13:21 173

原创 环形链表

直接采用快慢双指针,这个思想简单明了,根据这个思想,代码也很容易搞出来代码:class Solution: def hasCycle(self, head: ListNode) -> bool: if head == None: return False s = head q = head ...

2020-03-09 12:16:46 75

原创 好难的单链表练习

Form1ILinearList (接口)SNode(定义节点)SLinkList(实现接口)CityMessage1:引用Form1City(定义的类)CityList(实现一些方法):继承SLinkListForm1(实现窗体)代码大部分解读马老师的csdn:城市单链表设计如下:实现如下:...

2020-03-08 21:12:42 91

原创 最佳买卖股票时机2

相对于后面的几个来说非常简单,一个for就搞定了class Solution: def maxProfit(self, prices: List[int]) -> int: l=len(prices) diff,lirun=0,0 for i in range(1,l): diff=prices[i]-pric...

2020-03-08 13:25:11 93

原创 猜数字 python

较简单print('猜测一个0到100之间的整数。')import randomit=random.randint(0, 100)for i in range(1,99999999): temp=input("请输入:") if temp.isdigit(): guess=int(temp) if guess==it: ...

2020-03-08 13:19:33 113

原创 删除链表中的重复元素

判断下一个元素与前一个元素的关系,如果相等,就把第三个值赋给第二个值,如果不相等,就从第二个元素从新判断# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Soluti...

2020-03-08 10:04:52 81

原创 连接两个链表

今天的还是比较简单的,直接运用递归方法:class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: head = ListNode(None) c = head while l1 and l2: if l1.v...

2020-03-07 19:33:59 300

原创 力扣 最大利润买卖股票3 python

这是让人头秃的题目没什么思路,下不了手,就求助学习了题解大佬的解析,顺利卸货大致思路是穷举所有可能的状态,再分别分析所有选择第三题,k = +infinity with cooldown每次 sell 之后要等一天才能继续交易。只要把这个特点融入上一题的状态转移方程即可:dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])dp[i][1]...

2020-03-06 18:48:37 222

原创 力扣16 最近三数之和

先根据上一个题改了一下得到一组代码class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: n=len(nums) if(not nums or n<3): return None nums.sort()...

2020-03-05 19:09:25 76

空空如也

空空如也

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

TA关注的人

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