自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

第一天

2022-12-07 18:20:48 72 1

原创 5. 最长回文子串

class Solution: def longestPalindrome(self, s: str) -> str: if len(s)==2 and s[0]!=s[1]: return s[0] dict_s=collections.Counter(s) if len(dict_s)==1: return s n=len(s) dp=[[0]*len(s) f

2021-02-24 12:05:14 74

原创 300. 最长递增子序列

输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。动态规划解法使用dp记录递增子序列的个数def lengthOfLIS(self, nums: List[int]) -> int: dp=[0]*len(nums) for i in range(len(nums)): for j in range(i): if nums[i]>num[j]: dp[i]=max(dp[i],d

2021-02-24 11:36:06 68

原创 72. 编辑距离

class Solution: def minDistance(self, word1: str, word2: str) -> int: dp=[[0]*(len(word2)+1) for i in range(1+len(word1))] for i in range(len(word1)+1): dp[i][0]=i for j in range(len(word2)+1): dp[...

2021-02-24 11:31:33 57

原创 200. 岛屿数量

网格类问题的 DFS 遍历方法class Solution: def numIslands(self, grid: List[List[str]]) -> int: def dfs(grid,i,j): if not 0<=i<len(grid) or not 0<=j<len(grid[0]) or grid[i][j]!='1': return grid[i][j

2021-02-22 10:34:15 39

原创 142. 环形链表 II

# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def detectCycle(self, head: ListNode) -> ListNode: slow, fast = head, head while T

2021-02-20 13:58:46 38

原创 17. 电话号码的字母组合

class Solution: def letterCombinations(self, digits: str) -> List[str]: dict={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'} if not digits: return [] ans=[] de

2021-02-20 11:50:39 49

原创 279. 完全平方数

squres_num=[i**2 for i in range(int(math.sqrt(n)+1)]dp=[float('inf')]*(n+1)]dp[0]=0for i in range(n+1): for s in squres_num: if i<s: break res[i]=min(res[i],res[i-s]+1)return res[-1]

2021-02-19 12:08:39 52

原创 337. 打家劫舍 III

我们可以用 f(o)f(o) 表示选择 oo 节点的情况下,oo 节点的子树上被选择的节点的最大权值和;g(o)g(o) 表示不选择 oo 节点的情况下,oo 节点的子树上被选择的节点的最大权值和;ll 和 rr 代表 oo 的左右孩子。当 oo 被选中时,oo 的左右孩子都不能被选中,故 oo 被选中情况下子树上被选中点的最大权值和为 ll 和 rr 不被选中的最大权值和相加,即 f(o) = g(l) + g(r)f(o)=g(l)+g(r)当 oo 不被选中时,oo 的左右孩子可以被选中,也可以不

2021-02-19 10:58:42 94

原创 102. 二叉树的层序遍历

# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if no

2021-02-19 10:56:28 33

原创 236. 二叉树的最近公共祖先

可以归纳出三种情况:1.若在root的左右子树中找到,那么root一定是最近公共节点2.若在root.left中找到,那么就可以返回left3.若在root.right中找到,那么就可以返回right# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.ri.

2021-02-08 11:27:11 97

原创 148. 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。list对应的归并排序def sortList(nums): n = len(nums) if n < 2: return nums mid=n//2 left=merge(nums[:mid]) right=merge(nums[mid:]) ans=[] i = j = 0 while i < len(left) and j

2021-02-08 11:08:54 40

原创 64. 最小路径和

创建二维数组 \textit{dp}dp,与原始网格的大小相同,\textit{dp}[i][j]dp[i][j] 表示从左上角出发到 (i,j)(i,j) 位置的最小路径和。显然,\textit{dp}[0][0]=\textit{grid}[0][0]dp[0][0]=grid[0][0]。对于 \textit{dp}dp 中的其余元素,通过以下状态转移方程计算元素值。当 i>0i>0 且 j=0j=0 时,\textit{dp}[i][0]=\textit{dp}[i-1][0]+\t

2021-02-07 12:08:27 45

原创 105. 从前序与中序遍历序列构造二叉树

前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]class Solution(object): def buildTree(self, preorder, inorder): if not (preorder and inorder): return None # 根据前序数组的第一个元素,就可以确定根节点 root = TreeNode(preorder[0]) # 用preorder[0]去中序数组中查找对应

2021-02-07 11:31:52 40

原创 96. 不同的二叉搜索树

解题思路标签:动态规划假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + … + f(n)G(n)=f(1)+f(2)+f(3)+f(4)+…+f(n)当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i,则f(i) = G(i-1)*G(n-i)f(i)=G(i−1)∗G(n−i)综合两个公式可以得到 卡特兰数 公式G(n) = G(0)G(n-1)+G

2021-02-07 10:47:10 36

原创 208. 实现 Trie (前缀树)

class Trie: def __init__(self): """ Initialize your data structure here. """ self.root={} def insert(self, word: str) -> None: """ Inserts a word into the trie. """ curr=self.roo

2021-02-07 10:19:07 65

原创 114. 二叉树展开为链表

输入:root = [1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,null,5,null,6]def flatten(self, root: TreeNode) -> None: if not root: return [] res=[] def dfs(root,res): if root: res.append(root) dfs(root.left) dfs(root.right) dfs(root,res).

2021-02-05 11:51:31 54

原创 39. 组合总和

输入:candidates = [2,3,5], target = 8,所求解集为:[ [2,2,2,2], [2,3,3], [3,5]]画出树形图,很关键class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: candidates.sort() res=[] def backtr

2021-02-05 11:13:29 43

原创 二叉树的中序遍历

题目描述给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]输出: [1,3,2]思路2.1 递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: de.

2021-02-04 11:56:46 42

原创 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。需要满足条件l>r,l=r=ndef generateParenthesis(self, n: int):n为生成n对括号 res=[] if n<0: return None backtracking(n,res,0,0,'') def backtracking(n,res,left,right,s): if left==right==n: res.append(s)

2021-02-04 11:05:37 46

原创 三数之和

涉及到排序和双指针def sumthree(nums): if len(nums)<3 or not nums: return [] res=[] nums.sort() n=len(nums) for i in range(): if nums[i]>0: break if i>0 and nums[i]==nums[i-1]: continue l=i+1 r=n-1 if nums[l]+nums[r]+nums[i]==0: r

2021-02-04 10:18:41 45

原创 快速排序

def quick(nums): def quick_sort(nums,left,right): l=left r=right temp=nums[l] while l<r: while l<r and nums[r]>temp: r-=1 while l<r and nums[l]<temp: l+=1 nums[l],nums[r]=nums[r],nums[l] temp=nums[l] quick_sort(

2021-02-04 10:05:28 29

原创 46.全排列

这是一道经典的回溯算法题首先这棵树除了根结点和叶子结点以外,每一个结点做的事情其实是一样的,即:在已经选择了一些数的前提下,在剩下的还没有选择的数中,依次选择一个数,这显然是一个 递归 结构;递归的终止条件是: 一个排列中的数字已经选够了 ,因此我们需要一个变量来表示当前程序递归到第几层,我们把这个变量叫做 depth,或者命名为 index ,表示当前要确定的是某个全排列中下标为 index 的那个数是多少;布尔数组 used,初始化的时候都为 false 表示这些数还没有被选择,当我们选定一个数的

2021-02-02 11:58:21 63

原创 78.subset子集

python中copy()和deepcopy()详解对于简单的 object,用 shallow copy 和 deep copy 没区别复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。>>> import copy>>> ori

2021-02-02 11:11:41 84

原创 对称二叉树

首先了解not (A and B)和not (A or B)not (A and B)not (true and true) falsenot (true and false) truenot (false and false) true只要有False,not and的结果就是True,只有一种情况不符合not (A or B)not (true or true) falsenot (true or false) falsenot (false or false) true只要有t

2021-01-29 15:18:24 61

原创 121买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。此题是最简单的买卖股票问题,还有很多变种题目。此题可以用动态规划做,但是有些大材小用,此题用动态规划做是维护了一个数组,但是可以直接维护一个最大数即可。思路,当我们知道最小值是什么时,那么其他数减去最小数就

2021-01-26 16:22:10 271

原创 相交链表

双指针法最浪漫的相遇,如果有交点,那么headA走完一圈再走headB与headB走完一圈再走headA,就一定会相遇,a+c+b=b+c+a?定义两个头节点,保存信息dummyA=headAdummyB=headBwhile headA!=headB: headA=headA.next if headA else dummyB headB=headB.next if headB else dummyAreturn headA or headB...

2021-01-26 16:05:07 35

原创 移动零

双指针法,双指针一般会用while循环做l=0r=0n=len(nums)while此题,用r判断不为零的数,并和l互换位置,这样就不管是否为0.l=0r=0n=len(nums)while r<n: if nums[r]!=0: nums[l],nums[r]=nums[r],nums[l] l+=1 r+=1return nums...

2021-01-26 15:30:46 29

原创 206反转链表

class ListNode: def __init__(self,val=0,next=None): self.val=val self.next=next方法一,双指针法:定义一个dummy节点,并指向headdummy=ListNode(0)dummy.next=headwhile head!=None and head.next!=None: dn=dummy.next hn=head.next dummy.next=head.next head.next=head.n

2021-01-24 13:00:49 33

原创 二叉树的最大深度

同样是两种方法方法一,递归法if not root: return 0left=self.maxdeep(root.left)right=self.maxdeep(root.right)return max(left,right)+1方法二,迭代法if not root: return 0queue=[root]ans=0while queue: ans+=1 for i in range(len(queue)): cur=queue.pop(0) if cur.lef

2021-01-24 12:09:58 32

原创 翻转二叉树

翻转二叉树这题同合并二叉树相同,也有两种基本方法,递归和迭代方法一,递归if not root: return root开始递归left=self.inverse(root.left)返回最底层的左节点right=self.inverse(root.right)root.left,root.right=right,left执行每次递归动作return root方法二,迭代同样需要借助队列完成if not root: return rootqueue=[root]while

2021-01-23 12:59:02 49

原创 合并二叉树_合并两个有序链表

今天开始刷力扣100,每天都刷,不刷是狗满二叉树和完全二叉树区别满二叉树是完全二叉树的一个特例,满二叉树所有节点都是完全二叉树的左边节点都有,但是右边节点可以没有合并二叉树方法一:递归法终止条件,两棵树的任意一颗没有即终止既是终止条件,也是判断corner caseif not t1: return t2if not t2: return t1每个递归中的任务:t3=TreeNode(t1.val+t2.val)执行递归,左右子树的递归t3.left=self.

2021-01-22 14:09:00 179

原创 文本分类

文本分类文本分类需要用到re,数据清洗,分词替换叠词re.findall(pattern{n,m},txt)http://c.runoob.com/front-end/854使用这个网站在线匹配构建停用词,除了常用的停用词外,可以根据文本中需要去除的文本加入构建词典,不想被分词器分开的词,可以添加到词典中先是传统方法,文本分类有分类器,logistics,svm,naviebayes,xgb……可以将文本编码为词频或者是tfidf其中词频可使用 countervectorizetfidf

2020-09-23 15:45:58 80

原创 2020-09-20

tf.contrib.layers.embed_sequence链接:https://www.tensorflow.org/api_docs/python/tf/contrib/layers/embed_sequence说明:对序列数据执行embedding操作,输入[batch_size, sequence_length]的tensor,返回[batch_size, sequence_length, embed_dim]的tensor。例子:features = [[1,2,3],[4,5,6]]

2020-09-20 16:58:46 128

原创 re

re匹配.任意匹配^匹配开头$匹配结尾,或者换行符前一个字符*对前面的正则式匹配0到任意次+对前面的正则式匹配1到任意次,也就是不会匹配到自身?对前面的正则式匹配0到1*?非贪婪匹配,同+和?{m}对之前的正则式匹配m个重复[]表示一个字符集合|或()具体参考https://docs.python.org/zh-cn/3/library/re.html...

2020-09-15 17:28:35 46

原创 2020-09-08

记今天学的pycharm debug 打断点seq2seqvariance_scaling_initializer方差截断,一种初始化方法selu 激活函数,从relu–elu–selu,定义两个参数(还没搞懂)https://www.jianshu.com/p/d216645251ce建立RNN(rnn==tf.contrib.rnn)1、先建立一个cell ,rnn.GRUBlockCell(num_units),其中num_units,是指最后输出的维度,通过最后一层softmax映

2020-09-08 18:57:24 165

原创 2020-09-06

二叉搜索树的后序遍历后序遍历是左–右--根二叉搜索树 所有左子树小于根节点 所有右子树大于根节点递归解析:终止条件:当i>j,说明此子树节点数量≤1 ,无需判别正确性,因此直接返回 true递推工作:划分左右子树:遍历后序遍历的 [i, j]区间元素,寻找 第一个大于根节点 的节点,索引记为 m 。此时,可划分出左子树区间 [i,m-1]、右子树区间 [m, j - 1] 、根节点索引 j 。判断是否为二叉搜索树左子树区间 [i, m - 1]内的所有节点都应 << p

2020-09-06 14:44:08 171

原创 list中出现最多的数

返回list中出现最多的数使用collections中的Countercounts = collections.Counter(nums)return max(counts.keys(), key=counts.get)

2020-09-06 09:56:22 431

空空如也

空空如也

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

TA关注的人

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