Python数据结构与算法
文章平均质量分 90
xutiantian1412
考虑到历史的行程,我就从地质专业润了去做风控算法。
展开
-
10.6 贪心算法详解及LeetCode题目
可参考几篇博客详解贪心算法(Python实现贪心算法典型例题)五大常用算法之一:贪心算法算法概述贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的...原创 2020-04-06 22:03:32 · 705 阅读 · 0 评论 -
10.5.2 (python) 动态规划字符串类LeetCode题目 —— Interleaving String & Distinct Subsequences
下面我们看两道字符串子序列的问题 subsequence,首先明白子序列是不必连续的。97.Interleaving StringGivens1,s2,s3, find whethers3is formed by the interleaving ofs1ands2.Example 1:Input: s1 = "aabcc", s2 = "dbbca", s3 ...原创 2020-03-29 18:19:54 · 254 阅读 · 0 评论 -
10.5.1 (python) 动态规划字符串类LeetCode题目 —— Edit Distance & Regular Expression Matching
下面学习几道字符串的题目,难度一般较大,但是也有共性,有套路,必须掌握几道经典的题目。72.Edit DistanceGiven two wordsword1andword2, find the minimum number of operations required to convertword1toword2.You have the following 3 ...原创 2020-03-29 14:17:34 · 288 阅读 · 0 评论 -
10.4.3 (python) 动态规划专题之股票买卖 —— Best Time to Buy and Sell Stock
这一系列涉及到LeetCode中几道关于股票stock买卖时机的题目,给出一数组,代表每天股票的价格,我们要按要求,计算你所能获取的最大利润。需要注意的是,你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。Say you have an array for which theithelement is the price of a given stock on dayi.De...原创 2020-03-15 11:27:32 · 618 阅读 · 0 评论 -
10.4.2 (python) 动态规划专题之换零钱 —— Coin Change & Perfect Squares
换零钱是一个典型的动态规划场景。322.Coin ChangeYou are given coins of different denominations and a total amount of moneyamount. Write a function to compute the fewest number of coins that you need to make up t...原创 2020-03-08 20:24:20 · 272 阅读 · 0 评论 -
10.4.1 (python) 动态规划专题之最长递增子序列 —— Longest Increasing Subsequence & Russian Doll Envelopes
Longest Increasing Subsequence 简称 LIS,是一个经典问题。我们看一下经典解题方法及一道应用题目。300.Longest Increasing SubsequenceGiven an unsorted array of integers, find the length of longest increasing subsequence.Exam...原创 2020-03-08 19:50:40 · 839 阅读 · 0 评论 -
10.3.3 (python) 动态规划数组类LeetCode题目 —— Dungeon Game & Frog Jump
来看两道 hard 级别的题目,其子问题性质很明显,就是动态规划,难点就是我们可能找不好子问题的关系式。174.Dungeon GameThe demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. The dungeon consists of M ...原创 2020-03-08 00:06:35 · 259 阅读 · 0 评论 -
10.3.2 (python) 动态规划数组类LeetCode题目 —— Decode Ways & Range Sum Query 2D
这几道题稍微加大难度,DP的框架是不变的,关键是分析问题的结构,分析状态转移关系。91.Decode WaysA message containing letters fromA-Zis being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26...原创 2020-03-07 20:11:45 · 286 阅读 · 0 评论 -
10.3.1 (python) 动态规划数组类LeetCode题目 —— Minimum Path Sum & Triangle & Maximum Product Subarray
这一节的几篇,都是解析动态规划数组类题目,相对于后面的字符串类问题来说,还是比较容易的。首先来看比较几个简单的DP题目,巩固一下前面所学套路。64.Minimum Path SumGiven amxngrid filled with non-negative numbers, find a path from top left to bottom right whichmi...原创 2020-02-27 21:49:47 · 292 阅读 · 0 评论 -
10.2 动态规划算法套路及空间优化 —— Climbing Stairs & Unique Paths
这一篇文章从最简单的动态规划题目开始,结合上一节动态规划三要素,阐述DP问题的基本套路解法。原创 2020-02-26 22:30:44 · 539 阅读 · 0 评论 -
10. 1 动态规划及贪心算法概述
这一章介绍两个重要的算法思想:动态规划和贪心。谈到算法思想,前面已经涉及到的包括,递归,分治,当然暴力求解也是一种算法思想(关于算法思想的知识框架,可以参考算法书籍),但是许多问题最优解暴力实在解决不了或者效率低下,不够优美,这样就引出了——动态规划。一. 概述建议在对算法有所了解的情况下再学习。什么是动态规划(Dynamic Programming)?动态规划的意义是什么?首...原创 2020-02-17 00:39:01 · 863 阅读 · 0 评论 -
7.12.1 线段树原理及应用(上)
继续在树这一类问题上拓展,线段树也是高级的数据结构,初学者要跳过,深入学习阶段可以适当了解一下,拓宽思维能力。如果要参加竞赛或者其他对数据结构要求比较高的情形,可以仔细研究一番,本文借其他博客和几道力扣题目介绍一下线段树。第一篇文章我们先从以下两个问题展开:1. 线段树是什么?是什么样的结构?这样的结构可以解决什么样的问题?2. 线段树的基本实现及区间查询问题——LeetCode307...原创 2020-02-16 18:43:16 · 359 阅读 · 0 评论 -
7.6.2 (python)AVL LeetCode题目 及 AVL结点插入操作详解
这一节关于 AVL 平衡二叉搜索树的题目,刷了不少题,关于平衡树的题目确实很少,做来做去,就先看下面这两道小儿科的题目吧。110.Balanced Binary TreeGiven a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree i...原创 2019-08-11 10:05:55 · 1031 阅读 · 0 评论 -
7.6.3 (python)BST LeetCode题目 —— Delete Node in a BST & Recover Binary Search Tree
这一节再解析两道题,略有难度的。450.Delete Node in a BSTGiven a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST...原创 2019-08-09 17:46:17 · 246 阅读 · 0 评论 -
7.6.1 (python)BST LeetCode题目 —— Minimum Absolute Difference in BST & Convert BST to Greater Tree
BST相关题目并不多,毕竟是一个查找的数据结构。对于BST的题目,最常用的就是中序遍历获得递增序列,进而解决一些题目。在做这一部分题目之前,先默念中序遍历大法。以98.Validate Binary Search Tree 为例,如何判断是否为二叉搜索树呢,就是对树进行中序遍历,判断序列是否递增。class Solution: def isValidBST(self, roo...原创 2019-08-05 09:38:58 · 261 阅读 · 0 评论 -
7.5 二叉查找树(BST)及平衡二叉树(AVL)的概念及基本运算
经历二叉树的重重拷问,终于来到二叉查找树,又称二叉搜索树(BinarySearchTrees)。在第6章查找算法的介绍中,我们提到了树表查找/动态表查找,BST因为关键字有序,在查找时同样高效,并且易于对关键字的插入及删除操作。二叉搜索树的基本概念二叉搜索树是一棵二叉树。这样一棵树可以使用一个链表结构表示,其中每个结点就是一个对象。除了结点中的关键字外,每个结点还包含属性left、righ...原创 2019-08-01 00:09:18 · 727 阅读 · 0 评论 -
7.4.2 python二叉树路径问题及LeetCode题目解析(2)
下面题目中的路径,定义有所延伸,在解法思路及时间空间复杂度上有所挑战。437.Path Sum IIIYou are given a binary tree in which each node contains an integer value.Find the number of paths that sum to a given value.The path does no...原创 2019-07-28 21:32:23 · 360 阅读 · 0 评论 -
7.4.1 python二叉树路径问题及LeetCode题目解析(1)
二叉树从根结点到每个叶子结点都形成一条路径,当然,从任意节点到任意节点也是一条路径,这一类题目较多是我们二叉树问题的重点,也伴随着一些有难度的题目。递归遍历依次访问树中结点可以构成路径,另外前面提到后序遍历非递归写法的栈中保留当前元素的所有祖先结点。首先我们看最简单的一道题,所有路径输出:257.Binary Tree PathsGiven a binary tree, retu...原创 2019-06-02 21:16:38 · 264 阅读 · 0 评论 -
7.3.1 二叉树遍历的应用及LeetCode题目解析(1)
这一节,我们看一下应用二叉树的遍历,可以解决哪些问题,如何应用这些原理刷题。花式遍历,加上我们接下来解析的题目,可以基本涵盖数据结构二叉树这部分的主要内容了。还是要对其中难点好好练习。其实,在LeetCode中有几道题目就是遍历二叉树, 如94 Binary Tree Inorder Traversal 144 Binary Tree Preorde...原创 2019-05-05 00:06:13 · 662 阅读 · 0 评论 -
7.10.1 优先队列及堆
树这一章真是又臭又长,这一节从优先队列着手,学习堆的概念。优先队列队列是一种FIFO(First-In-First-Out)先进先出的数据结构,优先队列(Priority Queue)是特殊的队列,从“优先”一词,可看出有“插队现象”,取出元素的顺序是依照元素的 优先权(关键字)。优先队列有两种特殊的操作:删除最大元素和插入元素。我们来看一下优先队列的实现方案,元素插入时如果不处理...原创 2019-08-19 21:18:14 · 292 阅读 · 0 评论 -
7.3.2 python 二叉树层次遍历应用及LeetCode题目解析(2)
这一节几道题目都是应用层次遍历的基本思路解决问题,当然也有不用层次遍历思想的解法,我们也会介绍一下。层次遍历可以同时处理二叉树每一层结点,许多问题迎刃而解。(三)二叉树层次遍历103.Binary Tree Zigzag Level Order TraversalGiven a binary tree, return thezigzag level ordertraversal ...原创 2019-05-05 19:15:02 · 341 阅读 · 0 评论 -
7.3.3 树和二叉树LeetCode题目解析(3)
二叉树这一数据结构十分重要,在此不断补充一些有趣味的题目,不断学习。623.Add One Row to TreeGiven the root of a binary tree, then value vand depth d, you need to add a row of nodes with value vat the given depth d. The root n...原创 2019-07-31 19:06:26 · 115 阅读 · 0 评论 -
7.9 哈夫曼树(Huffman Tree)
二叉树的知识还没完哈,我们来介绍一下哈夫曼树。参考博客:哈夫曼树haffman哈夫曼树——贪心算法(java)哈夫曼树原理,及构造方法概述给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。首先我们先学会这样一个概念:树...原创 2019-08-15 17:39:02 · 1731 阅读 · 0 评论 -
7.7.1 外查找之 B-tree、B+tree 认识
前面的BST、AVL都是用作内部查找的数据结构,即被查找的数据集不大,可以放在内存中。本节7.7 所介绍的查找树,用作外部查找所查数据放在外存中。本节内容,主要推荐几篇大神的博客,后面作一些转载,并总结主要内容,没有代码实践,就没有必要自己写一堆东西了,前辈们写的都很牛。1. July 大神的文章从B树、B+树、B*树谈到R 树2. 简明扼要的文章BTree和B+Tree详解...原创 2019-08-11 21:01:03 · 462 阅读 · 0 评论 -
2.2.2 python数据结构之栈——应用(2)中缀表达式计算与函数调用栈
前面一部分学习的是括号匹配和后缀表达式的计算,后缀表达式是没有括号的,每遇到一个运算符就弹出两个元素计算。那么如果遇到含有括号/各种优先级的中缀表达式,如何运算呢?当然还是离不开栈的应用啦。Leetcode 224. Basic Calculator (基础计算器)Implement a basic calculator to evaluate a simple expressio...原创 2018-04-17 17:26:13 · 680 阅读 · 0 评论 -
9.1 数据结构之图的基本概念及存储结构
前面8章都是比较基础的数据结构与算法,当然各章也有一些较深的知识。之后的章节,都是进阶的数据结构与算法的知识了。这一章我们介绍更复杂的数据结构——图。图状结构是一种比树形结构更复杂的非线性结构。在树状结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图状结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。因此...原创 2019-09-01 10:46:53 · 817 阅读 · 0 评论 -
7.10.2 (python)堆的应用及Leetcode题目解析
我们简单看几道二叉堆/优先队列的应用。215.Kth Largest Element in an ArrayFind thekth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element....原创 2019-08-21 23:58:55 · 308 阅读 · 0 评论 -
7.8.1 带你学习红黑树(1)
继续学习二叉搜索树相关知识,我们来认识一下略高级的数据结构——红黑树。鄙人在此仍然提供一些博客,并整理主要知识点及学习路线,由浅入深认识,觉得自己需要掌握到什么地步,适可而止。红黑树的特点和主要性质 红黑树结点的插入和删除 由2-3-4树理解红黑树 python 手撕红黑树推荐的文章又是July大神的系列文章,我会在下面的总结中捋一下怎么看:1、教你透彻了解红黑树2...原创 2019-08-13 21:28:10 · 300 阅读 · 0 评论 -
8.1.2 排序算法概述及python基本实现(下)
归并排序(Merge Sort)和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序...原创 2019-09-01 10:46:15 · 302 阅读 · 0 评论 -
8.1.1 排序算法概述及python基本实现(上)
从查找算法的性能可以看出,有序数据可以提高查找速度。对数据进行排序,是数据结构与算法知识基础篇中最后介绍也是最重要的一部分。面试时考察编程基础,一看字符串、数组处理的一些题目,二看链表、树的基础应用,三看查找、排序各种方法张口就来。排序算法是和语言无关的,本节重点还是python的实现;另外,排序算法分为几大类,若有不理解之处还要自行研究,本文不对原理详细展开(原理上比较复杂的算法不多,大...原创 2019-09-01 10:44:40 · 656 阅读 · 0 评论 -
7.7.3 (转载) B树、B+树、B*树(2)
原文链接:https://blog.csdn.net/v_JULY_v/article/details/6530142/转载自July博客从B树、B+树、B*树谈到R 树https://blog.csdn.net/v_JULY_v/article/details/6530142/之第一节第一节、B树、B+树、B*树6、B树的插入、删除操作上面第3小节简单介绍了利用...转载 2019-08-11 22:04:26 · 225 阅读 · 0 评论 -
7.7.2 (转载) B树、B+树、B*树(1)
转载自July博客从B树、B+树、B*树谈到R 树https://blog.csdn.net/v_JULY_v/article/details/6530142/之第一节第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Blac...转载 2019-08-11 21:12:18 · 248 阅读 · 0 评论 -
7.2 二叉树的基本运算及遍历的python实现
这几节内容,概念少,全靠代码撑住场面。多看代码,才能学习到二叉树的基本知识和应用。二叉树的基本运算所谓的基本运算主要包括:括号表示法的树与二叉链存储结构的树互相转换,树节点查找,求树高度。1. 树节点查找:最基本的操作了:class TreeNode: # 树节点的定义 def __init__(self, val): self.data = val...原创 2019-04-23 23:59:11 · 1172 阅读 · 2 评论 -
7.1 树及二叉树的概念及存储结构
终于来到数据结构中的核心内容——树。树是最重要的数据结构,没有之一。树,表示一个元素与多个元素之间一对多的关系,因此可以用来表示事物中的层次关系,如家谱,如企业或政府机关的组织结构关系等,在逻辑上的用层次关系来存储,在管理时也方便查找等。这一节从树的概念和存储开始,延伸至最重要的二叉树。以概念为主,大多数内容都在各教材和博客中可以找到。树的基本概念可以参考博客https://ww...原创 2019-04-14 23:24:51 · 780 阅读 · 0 评论 -
6.2.3 python二分查找算法及LeetCode题目(3)之二维数组 —— Search a 2D Matrix
接下来是两道二维数组查找的题目,看一下二维数组中二分查找的特点,或者说应用。74.Search a 2D MatrixWrite an efficient algorithm that searches for a value in anmxnmatrix. This matrix has the following properties:Integers in eac...原创 2019-04-13 22:47:05 · 461 阅读 · 0 评论 -
3.2.1 LeetCode数组类题目选做(1)—— First Missing Positive & Majority Element & Product of Array Except Self
数组题目概述数组的题目很多很重要,一般和其他知识点综合应用。包括Two pointer,Binary Search,Dynamic Programming,Greedy,Backtracking 等,各类算法都将分别选做一些题目学习交流总结。这一系列选择出一些非应用上述知识点,而是一些奇思妙想的、套路很深的数组的题目,总结后扩展思路,领悟一些可能会再次遇见的套路,也许可以处理类似的问题。...原创 2018-08-26 23:34:48 · 341 阅读 · 0 评论 -
3.1.3 python数组双指针算法3——滑动窗口(LeetCode Subarray Product Less Than K & Container With Most Water)
双指针算法的第三篇,题目的类型与前面都不同,鄙人给这个思想起了个不太合适的名字——滑动窗,其实与第一种两数求和的思想差不多,不同点大概是,滑动窗强调的是双指针之间的数组,求和问题只是一头一尾的遍历操作,关注的是双指针所在位置的元素,包括元素交换一类的也是关注的是指针所在位置的元素。因此用窗口一词形容我们的观察对象是双指针之间的所有元素。应用场景之滑动窗口713.Subarray Prod...原创 2018-08-13 00:07:17 · 853 阅读 · 1 评论 -
3.1.2 python数组双指针算法2——元素交换(LeetCode Remove Duplicates from Sorted Array & Remove Element)
距上一篇双指针的算法介绍已有四个月,换了个忙碌的工作,没时间也没心情刷题了。然而学习是一种信仰,一口气把two pointer剩下的一些题目学习了一下,现在继续总结归纳two pointer问题。上一节是几个经典的求和问题,这一节是元素交换的几个典型场景。应用场景之元素交换26. Remove Duplicates from Sorted ArrayGiven a sorted a...原创 2018-08-11 09:52:07 · 550 阅读 · 0 评论 -
3.1.1 python数组双指针算法1——求和问题(LeetCode 2sum & 3sum & 4sum)
LeetCode题目中数组和字符串的占比很大。在Array(数组)和String(字符串)的题目中,很多都是用双指针去解决问题的。在此综合几道Array中双指针的题目将这一思想方法汇总学习。后续还会有双指针在其他方面的应用。双指针算法介绍在之前链表的题目中也有双指针这一思想,详情可看 python数据结构之链表——带环链表及交叉链表(双指针法),链表中的双指针与数组中不同。双指针遍历数组时...原创 2018-04-20 16:12:54 · 3970 阅读 · 5 评论 -
2.3 python数据结构之队列——应用
队列的应用明确的说确实没有栈重要,鄙人认为大概是队列的先进先出算不上一种思想,而是一种正常的思维模式,不用想到队列也可以解决。比如打印机打印文档的管理,类似的很多,其实就是大家遵守秩序排队。应用1:杨辉三角啥是杨辉三角就不解释了,这一问题用队列解决很漂亮,当然不用也行(所以说队列不那么重要)。通过队列的应用可以线性的弹出n-1行的元素并插入第n行的元素。看下面的代码,在此只打印了...原创 2018-04-18 23:10:33 · 542 阅读 · 1 评论