自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 LeetCode | 动态规划算法(DP)求解最大最长系列问题(python版,最全解析)

动态规划解法由于不用考虑中间结果的暂存,不用输出所有可能情况的集合,只需要求解问题的个数。所以dp很适合求解最大、最长系列问题。最长递增子序列(LIS)leetcode300 LongestIncreaseSubsequenceGiven an unsorted array of integers, find the length of longest increasing subsequence.For example, given [10, 9, 2, 5, 3, 7, 101, 18],

2020-05-19 12:29:01 316

原创 侯捷《STL源码剖析》 | 容器详解 Deque(史上最简明介绍)

DequeDeque为双端队列,提供双端进出的操作,特点如下:包含一个map链表,用来将存放元素的多个缓冲区“连接”起来,使用者使用时像是拥有了连续空间。包含start、finish两个迭代器和一个pointer指针Deque的实现:Deque的iteratordeque迭代器的设计比较精巧,包含node、first、last、cur四个指针。特定如下:若_Duque_iterator中node指向某个缓冲区,first指向buffer开端,last指向buffer末端,cur指向b

2020-05-19 21:35:46 268

原创 侯捷《STL源码剖析》 | 容器详解 RBTree 和 HashTable(史上最简明介绍)

RBTreeRed-Black tree(红黑树)是一种节点有特定颜色的平衡二叉搜索树(balanced binary search tree),其特点如下:节点有颜色,红黑色有关系(具体可自己搜索)拥有平衡二叉搜索树的所有性质rb_tree提供遍历操作,按照正常规则遍历(++ite),能获得排序状态不应使用re_tree的ite改变元素值,因为元素有其严瑾的排列规则rb_tree用两种插入操作:insert_unique()和insert_equal(),后者key可以重复rb_tree节

2020-05-19 21:31:44 342

原创 侯捷《STL源码剖析》 | 容器的结构和分类(史上最简明的介绍)

容器的分类序列式容器(sequence container)array(数组)vector(向量)deque(双端队列)List(双向链表)forward list(单向链表)stack、queue底层可以调用deque实现。关联式容器(associative container)set / Multisetmap / Multimapset、map基于红黑树(RBtree)的实现。set中元素不能重复,Multiset中可以存储重复元素。map中key不能

2020-05-19 20:54:58 313

原创 侯捷《STL源码剖析》 | 六大部件(史上最简明的介绍)

STL解析 | STL的体系结构基础在leetcode的刷题过程中,有时调用到C++中的容器、迭代器,这些都封装在STL(Standard Template Library)中。偶然的机会,在B站看完侯捷老师的解析,据此作笔记记录一下,加深影响。写在前面使用一个东西,却不明白它的道理,不高明!STL的六大部件(components)容器(container)分配器(allocator)算法(algorithm)迭代器(iterator)适配器(adapter)仿函式(functor)

2020-05-19 14:48:24 1000

原创 LeetCode 432 | 一文帮你搞定“全 O(1) 的数据结构”(c++版,详细讲解)

数据结构设计 | 全 O(1) 的数据结构leetcode432 allOneDataStructure实现一个数据结构支持以下操作:1.Inc(key)插入一个新的值为 1 的 key。或者使一个存在的 key 增加一,保证 key 不为空字符串。2.Dec(key)如果这个 key 的值是 1,那么把他从数据结构中移除掉。否者使一个存在的 key 值减一。如果这个 key 不存在,这个函数不做任何事情。key 保证不为空字符串。3.GetMaxKey()返回 key

2020-05-19 13:54:02 200

原创 LeetCode | 一文帮你搞定“最小栈和LRU_cache”(python版,详细讲解)

数据结构设计 | 最小栈和LRU_cache数据结构设计类的问题,在面试过程中作为考察编码者的基本功经常被问到,这类题目在leetcode里面数量不多。最小栈leetcode155 MinstackDesign a stack that supports push, pop, top, and retrieving the minimum element in constant time.push(x) – Push element x onto stack.pop() – Removes

2020-05-19 13:50:45 131

原创 LeetCode | 一文帮你搞定“环形链表”(python版,最简单解析)

链表节点的定义链表作为一种数据结构,由链表节点互相连接构成。链表节点包含自身的数据和一个指向下一节点的指针。"""Definition of ListNode"""class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next由于节点自身的结构特点,链表可以仅由一个头结点表示。环形链表顾名思义,环形链表指链表构建过程中,存在环,即

2020-05-19 13:34:11 161

原创 LeetCode | 一文帮你搞定“树的分治算法”(python版,史上最详细解析)

分治算法顾名思义,分治算法的意思是将复杂的问题一分为多(通常是一分为二),然后对子问题分开处理。树由于其特殊的结构,很适合将树分成子树的结构,然后分开处理。由此看到,对于特定的数据结构,一般存在特殊的算法对其进行匹配,然后方便我们的操作。前人的智慧真是无穷,在此想到牛顿的那句话,“如果说我看得比别人更远些,那是因为我站在巨人的肩膀上”。(这句话其实是用来骂胡克的,因为胡克背驼牛顿拿胡克的生理残疾说事,站在巨人的肩膀上暗指胡克的样貌残疾。扯远了。。)树的深度leetcode104 MaximumD

2020-05-19 12:18:14 229

原创 LeetCode | 一文帮你搞定“树的遍历”(python版,史上最全总结)

树专题树的结构和链表相似,不同的是它多了一个指针。为了区分两个指针,将其分别叫做指向左子树的指针和指向右子树的指针。拥有两个指针,可能多完成很多功能,可以用来很好地存储元素并完成元素的查找和更改。c++中使用的红黑树即为普通树的增强版。树的遍历在树的前、中、后序遍历过程中,都将介绍递归和非递归的两种方式。其中非递归方式介绍模板方法,有套路可寻,此可以当做工具使用递归方法树的前序遍历前序遍历的顺序为“根左右”,即可以将树分为:[根节点,左子树,右子树]。前序遍历的递归方法class

2020-05-19 11:56:43 206

原创 LeetCode | 买卖彩票的最佳时期(python版,史上最详细总结)

Leecode121 购买彩票的最佳时期给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。经典的贪心算

2020-05-19 11:40:27 586

原创 LeetCode | 一文帮你搞定二分法(python版)

二分法模板方法二分法也有其套路,通常定义首尾双指针,然后通过取得中间位置mid进行条件判断,从而缩短查找的范围。实例分步解析下面将以找到排序数组中target第一次出现的位置为例,分步解析二分法。nums= [1,2,2,3,3,3,4,4,5], target=4, return 6确定返回值类型和查找范围返回的是target在数组中的位置,即index。查找范围:[start=0, end=len(nums)-1]确定二分条件由于找第一次出现,当nums[mid] == target

2020-05-19 11:38:36 152

原创 LeetCode | 一文帮你搞定BFS、DFS算法(python版)

模板方法使用BFS,DFS的题目,在leetcode上一般标记为medium或者hard。但从思维逻辑上看,其难度定义偏高。可能从代码量来看,写一道BFS或者DFS的篇幅比其他类型的题目要多。BFS,DFS既然思维固定,必然有其套路。套用模板方法,让我们的解题更加流畅。有如庖丁解牛,游刃有余。BFS模板BFS思路是先将邻居加进来,如果只是口述的话难免枯燥。下面将以图上的搜索(找start_node到end_node之间的最短距离长度)为例,阐述怎样将思维变成代码。得到图正如链表其实质为节点和指

2020-05-19 11:34:31 969

原创 后邮

那些口口声声,说通信没落的人,应该看着你们;像我一样,我看着你们,满怀羡慕。人类积攒了几百年的财富,所有的理论、公式、实验器材和教学工具,像是专门为你们准备的礼物。数电,模电,信号与系统,通信原理,现代通信的成果像傅里叶变换一样,被层层展开,可以尽情地享用。自由学习一科理论,焊一块电路板,拼接一辆小车,做精彩的微波实验。很多人,从刚入学你们就在自由探索自己的兴趣;很多人在大三就进入了不惑之年,不惑于自己喜欢写代码,不喜欢做文章。人与人之间的壁垒被打破,你们只凭相同的

2020-05-19 00:20:22 110

原创 LeetCode |一文帮你搞定背包问题(python版)

[LeetCode416. Partition Equal Subset Sum]给定一个非负数组,是否可以将其分成两个和相等的子数组。Example 1: Input: [1, 5, 11, 5] Output: true Explanation: The array can be partitioned as [1, 5, 5] and [11]. Example 2: Input: [1, 2, 3, 5] Output: false Explanation: The

2020-05-18 23:59:18 277

原创 LeetCode | Path Sum系列问题史上最全讲解(python版)

路径总和系列[LeetCode112.Path Sum]给定一个二叉树和一个sum值,判断树中是否存在一条从根节点到叶子节点的路径,使得路径上的值加起来刚好等于sum。Example:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \7 2 1返回: true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。深

2020-05-18 23:56:38 125

原创 LeetCode | 史上最佳House Robber 系列总结(python版)

打家劫舍[LeetCode198.House Robber]今晚,你是一个抢劫犯,去抢劫一条街上的居民。抢劫两个相邻的用户你将会触发报警装置,怎么安排抢劫策略才能抢到最多的钱。Example 1:Input: [1,2,3,1]Output: 4Example 2:Input: [2,7,9,3,1]Output: 121. 动态规划:dp[i]表示到第i家可以获利最多。(i从0开始,dp数组共有i+1个数)假设nums为{3, 2, 1, 5},接下来我们推导dp数组的表示。

2020-05-18 23:53:16 140

原创 LeetCode 322 | 史上最佳Coin Change题解(python)

Coin change硬币找零问题:给定一个数组coins表示零钱的面值,然后给出手头钱的总数amount,问最少可以用多少枚硬币找零。Example 1: Input:coins=[1, 2, 5], amount = 11 Output:3 Explanation: 11 = 5 + 5 + 1 Example 2: Input:coins=[1, 2, 5], amount = 3 Output:-11.BFS(广度优先搜索)以当前值amount为起点,相邻的每一个节点为am

2020-05-18 23:50:55 568

leetcode.zip

leetcode相关题解,主要包含100道常见的题目的解析。 有需要的同学可以下载。另外题目的解题思路可以关注我的公众号“Li的白日呓语”。

2020-05-19

空空如也

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

TA关注的人

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