Leetcode
Leetcode刷题记录
头发凌乱的鳌拜
Leetcode刷题记录,DL&ML基础知识总结,读论文总结。
展开
-
Leetcode刷题记录
Leetcode刷题结构目录,按数据结构类型划分。原创 2021-12-15 21:35:33 · 365 阅读 · 0 评论 -
数字转人民币金额大写
python的数字转人民币大写,如果有什么漏掉的错误情况,请评论给我~原创 2022-10-16 10:12:43 · 286 阅读 · 1 评论 -
Leetcode刷题复健
leetcode常见题知识点、解法总结原创 2022-09-22 14:18:37 · 424 阅读 · 0 评论 -
【排序】functools
最近遇到两道题,1.对元素是链表的list排序2.根据元素的频率对list排序都需要自定义【比较函数】,定义完比较函数后,选一种排序方法就可以了,但python的话,还可以直接用内置的functools,如果笔试的时候,可以直接调。原创 2022-09-19 10:25:50 · 308 阅读 · 0 评论 -
leetcode 670 最大交换
贪心法,要交换的idx1,idx2, idx1原创 2022-09-13 10:54:43 · 183 阅读 · 0 评论 -
【最长递增系列】动态规划法和贪心法
导言:本文总结最长递增子序列、最长递增区间、最长数对链,本质上都是最长递增子序列,扩展到区间、数对,解法还是一致的。动态规划法复杂度是O(n^2),双层循环,在这里动态规划没有节省时间,不是最优解,贪心法需要排序+遍历,排序的时间复杂度是O(nlogn)。在做题时,往往先想到动态规划法,但是动态规划法特别容易超时。另外,在一维的时候,贪心+二分查找,实现上,细节较多,容易出错。原创 2022-09-04 10:09:04 · 304 阅读 · 0 评论 -
LC729.我的日程表
Leetcode地址:729. 我的日程安排表 I - 直接法和二分查找法原创 2022-07-05 22:39:46 · 172 阅读 · 0 评论 -
【子序列】522. 最长特殊序列 II
Leetcode地址:522. 最长特殊序列 II 双层循环法原创 2022-07-05 21:59:50 · 129 阅读 · 0 评论 -
【动态规划之背包问题】子集背包--目标和
494. 目标和 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/target-sum/Step1.转换为背包问题:Step2.异常情况判定:neg为非负 整数sums-target>0=0 and (sums-target)%2==0Step3. j开始的位置:0class Solution(object): def findTargetSumWays(self, nums, targe.原创 2022-04-05 15:05:04 · 405 阅读 · 0 评论 -
【回文串问题】分割回文串
Leetcode:131. 分割回文串 - 力扣(LeetCode) (leetcode-cn.com)分为两部分:1.动态规划确定子串是否是回文串2.枚举子集时间复杂度:O(n*2^n)空间复杂度:O(n^2)代码如下:class Solution(object): def partition(self, s): """ :type s: str :rtype: List[List[str]] """原创 2022-03-26 09:13:42 · 365 阅读 · 0 评论 -
【动态规划】鸡蛋掉落
887. 鸡蛋掉落 - 力扣(LeetCode) (leetcode-cn.com)时间复杂度:O(KN)空间复杂度:O(k)代码如下:class Solution(object): def superEggDrop(self, k, n): """ :type k: int :type n: int :rtype: int """ dp=[0]*(k+1) m=原创 2022-03-26 09:07:33 · 141 阅读 · 0 评论 -
【动态规划】打家劫舍
1.简单版:数组198. 打家劫舍 - 力扣(LeetCode) (leetcode-cn.com)时间复杂度:O(n)空间复杂度:O(n)(可优化到O(1))class Solution(object): def rob(self, nums): """ :type nums: List[int] :rtype: int """ dp=[0 for _ in nums] dp[0]=n原创 2022-03-15 23:30:36 · 297 阅读 · 0 评论 -
【面试题】拼接字符串
今天面试官给出了一道原创题,判断字符串s是否能够由arr中的元素组合拼接组成。输入示例:s="aabbcc"arr=["a","abb","c"]其实还挺简单的递归法的题目,太紧张然后写错边界条件。递归法两个注意点:1.字符串的边界条件2.遍历过程中只要有一次true,最后结果就是true代码如下:...原创 2022-03-14 16:14:32 · 432 阅读 · 0 评论 -
5. 最长回文子串
5. 最长回文子串 - 力扣(LeetCode) (leetcode-cn.com)从中间开始扩散两种情况:1.回文串长度为奇数2.回文串长度为偶数遍历字符串,从每个字符为中心扩散,寻找该点为中心时的最长回文串取所有情况的最大值时间复杂度:O(n)空间复杂度:O(1)代码如下:class Solution(object): def longestPalindrome(self, s): """ :type s: s原创 2022-03-13 10:45:43 · 319 阅读 · 0 评论 -
【回溯法】二叉树中的最大路径和
Leetcode:124. 二叉树中的最大路径和 - 力扣(LeetCode) (leetcode-cn.com)刚开始想的有点复杂,其实就是左最大路径+根节点.val+右最大路径,用暴力回溯就可以解决。如果暴力回溯的话,每个节点访问一次,在每个节点计算一次,那么时间复杂度为O(N),空间复杂度也为O(N)。每个节点处需要回传的是,当前节点作为路径中的边路上的一点时,这条分支最大路径和每个节点时即遍历时需要全局更新的是,当前计算得到的最大路径和是否是全局最大,如是,则更新代码原创 2022-03-09 08:07:28 · 226 阅读 · 0 评论 -
【二分查找】两个两次二分查找问题
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) (leetcode-cn.com)1.双指针class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ left,ri..原创 2022-02-27 14:49:05 · 222 阅读 · 0 评论 -
【BFS】打开转盘锁
752. 打开转盘锁 - 力扣(LeetCode) (leetcode-cn.com)1.BFS按找最短路径的方法,先BFS穷举,然后每一层进行判断。代码如下:运行结果超时class Solution(object): def openLock(self, deadends, target): """ :type deadends: List[str] :type target: str :rtype: .原创 2022-02-24 10:52:37 · 168 阅读 · 0 评论 -
Leetcode刷题小结
1.动态规划穷举问题-存在重叠子问题-存在最优子结构状态转移方程用于求解最值问题2.回溯法决策树的遍历过程1.路径2.选择列表3.结束条件纯暴力穷举,没有重叠子结构3.BFS寻找最短路径,代价是空间复杂度...原创 2022-02-24 08:18:42 · 136 阅读 · 0 评论 -
【动态规划】剪绳子
剑指 Offer 14- I. 剪绳子 - 力扣(LeetCode) (leetcode-cn.com)m是个泛指,一开始读题理解错误导致解了很久。简单来说,是一个动态规划问题,和找零钱问题类似。1.动态规划法时间复杂度:O(nm)空间复杂度:O(n)代码如下:class Solution(object): def cuttingRope(self, n): """ :type n: int :rtype: int原创 2022-02-23 11:38:17 · 628 阅读 · 0 评论 -
LRU cache
146. LRU 缓存 - 力扣(LeetCode) (leetcode-cn.com)OrderedDict:默认根据元素放入的顺序排序class LRUCache(object): def __init__(self, capacity): """ :type capacity: int """ self.dic=collections.OrderedDict() self.remain=capacit原创 2022-02-21 15:51:46 · 287 阅读 · 0 评论 -
岛屿的最大面积
695. 岛屿的最大面积 - 力扣(LeetCode) (leetcode-cn.com)DFS搜索时间复杂度:O(mn)空间复杂度:O(mn)class Solution(object): def maxAreaOfIsland(self, grid): """ :type grid: List[List[int]] :rtype: int """ area=[] for i in原创 2022-02-19 18:08:53 · 60 阅读 · 0 评论 -
岛屿周长问题
DFS方法即可遍历所有的岛屿,但是问题就在于怎么求周长。一个题解里面讲:每一次碰壁(遇到不说岛屿的地方)就是周长+1的地方。一个非常巧的、直接的周长求解方式。如图:图解:在 DFS 遍历过程中求周长(Java) - 岛屿的周长 - 力扣(LeetCode) (leetcode-cn.com)时间复杂度:O(mn)空间复杂度:O(mn)代码如下:class Solution(object): def islandPerimeter(self, grid): ...原创 2022-02-19 17:21:12 · 534 阅读 · 0 评论 -
岛屿数量问题
200. 岛屿数量 - 力扣(LeetCode) (leetcode-cn.com)1.DFS解法--感染问题每次遇到为‘1’的地方都去DFS搜索这整块岛屿,直到边界;每次遇到一块岛屿,计数器就加一时间复杂度:O(mn)空间复杂度:O(mn)代码如下:class Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rtyp原创 2022-02-19 17:03:54 · 290 阅读 · 0 评论 -
【动态规划】编辑距离
72. 编辑距离 - 力扣(LeetCode) (leetcode-cn.com)动态规划法:class Solution(object): def minDistance(self, word1, word2): """ :type word1: str :type word2: str :rtype: int """ dp=[[0]*(len(word2)+1) for _ in ran原创 2022-02-18 22:03:46 · 59 阅读 · 0 评论 -
【动态规划】零钱兑换
1.Leetcode地址:322. 零钱兑换 - 力扣(LeetCode) (leetcode-cn.com)def coinChange(self, coins, amount): """ :type coins: List[int] :type amount: int :rtype: int """ dp=[amount+1 for _ in range(amount+1)] dp[0]原创 2022-02-15 23:34:23 · 527 阅读 · 0 评论 -
【动态规划】子序列问题
子序列问题也是有一堆题目的问题。300. 最长递增子序列 - 力扣(LeetCode) (leetcode-cn.com)依次解决:1.【300】最长递增子序列300. 最长递增子序列 - 力扣(LeetCode) (leetcode-cn.com)1.1.动态规划法老老实实双层循环法。时间复杂度:O(n^2)空间复杂度:O(n)代码如下:class Solution(object): def lengthOfLIS(self, nums):原创 2022-02-14 20:12:03 · 343 阅读 · 0 评论 -
【动态规划】股票买卖问题
只允许买卖一次:121. 买卖股票的最佳时机 - 力扣(LeetCode) (leetcode-cn.com)允许买卖两次:123. 买卖股票的最佳时机 III - 力扣(LeetCode) (leetcode-cn.com)允许买卖K次:188. 买卖股票的最佳时机 IV - 力扣(LeetCode) (leetcode-cn.com)允许买卖多次,不限:122. 买卖股票的最佳时机 II - 力扣(LeetCode) (leetcode-cn.com)考虑买卖含有手续费:714. 买卖股原创 2022-02-12 23:36:58 · 741 阅读 · 0 评论 -
【动态规划】乘积最大子数组
Leetcode:152. 乘积最大子数组 - 力扣(LeetCode) (leetcode-cn.com)代码如下:class Solution(object): def maxProduct(self, nums): """ :type nums: List[int] :rtype: int """ if nums is None: return 0 dp=[[0,0原创 2022-02-09 16:32:33 · 210 阅读 · 0 评论 -
【动态规划】三角形最小路径和
Leetcode:120. 三角形最小路径和 - 力扣(LeetCode) (leetcode-cn.com)#f(m,0)=f(m-1,0)+triangle[m][0]#f(m,n)=min(f(m-1,n),f(m-1,n-1))+triangle[m][n]#f(m,len(triangle[n]-1))=f(m-1,len(triangle[n]-1-1)+triangle[m][len(triangle[n]-1]代码如下:class Solution(object):原创 2022-02-09 15:34:29 · 59 阅读 · 0 评论 -
【动态规划】爬楼梯
Leetcode地址:70. 爬楼梯 - 力扣(LeetCode) (leetcode-cn.com)动态规划:解法1:时间复杂度O(N)空间复杂度O(N)代码如下:class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ #f(n)=f(n-1)+f(n-2) #f(1)原创 2022-02-09 13:30:34 · 209 阅读 · 0 评论 -
位1的个数,2的幂,比特数记位
Leetcode地址:191. 位1的个数 - 力扣(LeetCode) (leetcode-cn.com)常用位运算:判断奇偶:x&1==1(奇数),xOR0==0(偶数),比取模的效率更高。清除最低位的1:x=x&(x-1)例:11:1011,清除二进制的1需要三次x&(x-1)运算step 1:1011&1010=1010step 2:1010&1001=1000step 3:1000&111=0得到最低位的1:x&a原创 2022-02-08 16:38:50 · 1306 阅读 · 0 评论 -
字典树(Trie)
字典树,也称为单词查找树or键树,是哈希树的变种。应用:统计、排序,常用于搜索引擎用于文本词频统计。利用字符串的公共前缀来降低查询时间开销以提供效率以英文的字典树来说,26个字母对应每个节点最多26个子节点,单词长度不超过20,即树的层数不超过20层。基本性质:1.根节点不包含字符,除根节点外,每个节点都只包含一个字符2.从根节点到子节点的路径是字符串3.每个节点的子节点不重复python版本的Trie树实现:class Trie(object): def原创 2022-02-06 14:51:19 · 908 阅读 · 0 评论 -
N皇后问题
Leetcode 51:51. N 皇后 - 力扣(LeetCode) (leetcode-cn.com)52. N皇后 II - 力扣(LeetCode) (leetcode-cn.com)DFS剪枝问题不能放棋子的条件:1.queen所在行【遍历项】2.queen所在列3.queen的左对角线,坐标x+y=C(常数)4.queen的右对角线,坐标y-x=C(常数)代码如下:class Solution(object): def solveNQueens(s.原创 2022-01-14 13:45:23 · 165 阅读 · 0 评论 -
二叉树的层平均值
Leetcode:637. 二叉树的层平均值 - 力扣(LeetCode) (leetcode-cn.com)时间复杂度:O(n)空间复杂度:O(n)层序遍历# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = le原创 2022-01-10 14:43:21 · 63 阅读 · 0 评论 -
Leetcode22:括号生成
Leetcode:22. 括号生成 - 力扣(LeetCode) (leetcode-cn.com)回溯法空间复杂度:O(n)时间复杂度括号生成 - 括号生成 - 力扣(LeetCode) (leetcode-cn.com)class Solution(object): def generateParenthesis(self, n): """ :type n: int :rtype: List[str] .原创 2022-01-13 22:49:01 · 165 阅读 · 0 评论 -
二叉树的最小深度
Leetcode:111. 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)BFS:时间复杂度:O(n)空间复杂度:O(n)代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.原创 2022-01-12 09:55:50 · 136 阅读 · 0 评论 -
二叉树的最大深度
Leetcode:104. 二叉树的最大深度 - 力扣(LeetCode) (leetcode-cn.com)DFS:时间复杂度:O(n)空间复杂度:O(height)代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val#原创 2022-01-11 22:37:16 · 66 阅读 · 0 评论 -
在每个树行中找最大值
Leetcode:515. 在每个树行中找最大值 - 力扣(LeetCode) (leetcode-cn.com)层序遍历时间复杂度:O(n)空间复杂度:O(n)代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.原创 2022-01-10 09:12:25 · 230 阅读 · 0 评论 -
二叉树的锯齿形层序遍历
Leetcode:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) (leetcode-cn.com)还是层序遍历的问题,只不过这里需要注意层数,从而选择是正序访问还是倒序访问。时间复杂度:O(n)空间复杂度:O(n)代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):#原创 2022-01-09 23:08:19 · 704 阅读 · 0 评论 -
二叉树的右视图
Leetcode:199. 二叉树的右视图 - 力扣(LeetCode) (leetcode-cn.com)属于BFS的一个应用场景:层序遍历时间复杂度:O(n)空间复杂度:O(n)这里用到了双端队列,方便查找右视图# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val原创 2022-01-08 10:43:34 · 305 阅读 · 0 评论