python学习
文章平均质量分 88
xutiantian1412
考虑到历史的行程,我就从地质专业润了去做风控算法。
展开
-
9.5.1 拓扑排序及LeetCode题目 —— Course Schedule II & Minimum Height Trees
首先解释AOV网的概念:用一个有向无环图DAG表示一项工程或项目,我们用顶点表示活动,用弧\边表示活动之间的优先关系。这样的图称为顶点表示活动的网即AOV网(Active on Vertex Network)。再看一下拓扑排序topologicalSort对于任何有向图而言,其拓扑排序为其所有结点的一个线性排序(对于同一个有向图而言可能存在多个这样的结点排序)。该排序满足这样的条件——对于图中的任意两个结点u和v,若存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。拓扑排序主要用来原创 2021-02-17 19:42:20 · 275 阅读 · 3 评论 -
9.4 最短路径算法
最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求起始点到所有点的最短路径的问题。 确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,有向图中该问题等同于把所有路径方向反转的确定起点的问题。 确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。 全局最短路径问题 - 求图中所有原创 2021-02-16 20:30:53 · 827 阅读 · 0 评论 -
9.3 最小生成树算法
接下来我们看最小生成树问题,和下一节的最短路径问题容易混淆。最小生成树的概念(1)一个带权值的图:网。并需要最小成本,就是用n-1条边把n个顶点连接起来,且连接起来的权值最小。(2)我们把构造联通网的最小代价生成树称为最小生成树产生最小生成树必须解决下边两个问题:(1) 尽可能选取权值小的边,但不能构成回路;(2) 选取n-1条恰当的边以连通n个顶点。最小生成树的算法主要有Kruskal算法和Prim算法,他们都是贪心算法的应用。最小生成树的应用用带权值的图表示一群城市及城市间的原创 2021-02-15 23:37:53 · 472 阅读 · 0 评论 -
9.2.3 图的遍历及路径 —— Reconstruct Itinerary & All Paths From Source to Target
前面的遍历都没有关注路径本身,本节从两道题目着手,穴习一个图的遍历及路径。首先了解几个概念。1.欧拉通路:通过图(有向图或者无向图)中的所有边,且每条边只通过一次且行遍所有顶点的通路。2.欧拉回路:当欧拉通路为回路时,称为欧拉回路。3.欧拉图:具有欧拉回路的无向图。半欧拉图:具有欧拉通路但不具有欧拉回路的无向图。简单来说,类似于[一笔画]问题。七桥问题是最早涉及这一问题的数学趣闻,有兴趣的可以了解一下https://www.cnblogs.com/graytido/p/10421927.h.原创 2021-02-10 10:35:15 · 484 阅读 · 0 评论 -
9.2.2 图的遍历LeetCode题目 —— Find the Town Judge & Clone Graph & Keys and Rooms
133.Clone GraphGiven a reference of a node in aconnectedundirected graph.Return adeep copy(clone) of the graph.Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.题解:注意题目的入参和出参,都是Node结构,而题目说明及例子多少绕了个弯。...原创 2021-02-09 17:39:44 · 216 阅读 · 0 评论 -
9.2.1 图的存储与遍历
2021 继往开来,继续学习数据结构。9.1一节简述图的基本概念及存储结构,这一节我们深入看一下图的存储,学习图的遍历方法,实现图的存储和遍历。原创 2021-01-17 22:22:53 · 527 阅读 · 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 · 240 阅读 · 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 · 273 阅读 · 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 · 599 阅读 · 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 · 260 阅读 · 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 · 826 阅读 · 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 · 248 阅读 · 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 · 277 阅读 · 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 · 277 阅读 · 0 评论 -
10.2 动态规划算法套路及空间优化 —— Climbing Stairs & Unique Paths
这一篇文章从最简单的动态规划题目开始,结合上一节动态规划三要素,阐述DP问题的基本套路解法。原创 2020-02-26 22:30:44 · 494 阅读 · 0 评论 -
7.12.1 线段树原理及应用(上)
继续在树这一类问题上拓展,线段树也是高级的数据结构,初学者要跳过,深入学习阶段可以适当了解一下,拓宽思维能力。如果要参加竞赛或者其他对数据结构要求比较高的情形,可以仔细研究一番,本文借其他博客和几道力扣题目介绍一下线段树。第一篇文章我们先从以下两个问题展开:1. 线段树是什么?是什么样的结构?这样的结构可以解决什么样的问题?2. 线段树的基本实现及区间查询问题——LeetCode307...原创 2020-02-16 18:43:16 · 346 阅读 · 0 评论 -
7.2 二叉树的基本运算及遍历的python实现
这几节内容,概念少,全靠代码撑住场面。多看代码,才能学习到二叉树的基本知识和应用。二叉树的基本运算所谓的基本运算主要包括:括号表示法的树与二叉链存储结构的树互相转换,树节点查找,求树高度。1. 树节点查找:最基本的操作了:class TreeNode: # 树节点的定义 def __init__(self, val): self.data = val...原创 2019-04-23 23:59:11 · 1122 阅读 · 2 评论 -
7.1 树及二叉树的概念及存储结构
终于来到数据结构中的核心内容——树。树是最重要的数据结构,没有之一。树,表示一个元素与多个元素之间一对多的关系,因此可以用来表示事物中的层次关系,如家谱,如企业或政府机关的组织结构关系等,在逻辑上的用层次关系来存储,在管理时也方便查找等。这一节从树的概念和存储开始,延伸至最重要的二叉树。以概念为主,大多数内容都在各教材和博客中可以找到。树的基本概念可以参考博客https://ww...原创 2019-04-14 23:24:51 · 744 阅读 · 0 评论 -
python的特殊数字类型(无穷大、无穷小等)
以下是转载的,对于python中无穷大、无穷小,Nan的介绍。平常用的不多但是很基础,见到后转载下来,有相关知识本篇还会继续添加。float('inf') 表示正无穷-float('inf') 或 float('-inf') 表示负无穷其中,inf 均可以写成 Inf起步python中整型不用担心溢出,因为python理论上可以表示无限大的整数,直到把内存挤爆。而无穷大在...转载 2019-05-04 20:55:37 · 1553 阅读 · 1 评论 -
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 · 331 阅读 · 0 评论 -
7.3.1 二叉树遍历的应用及LeetCode题目解析(1)
这一节,我们看一下应用二叉树的遍历,可以解决哪些问题,如何应用这些原理刷题。花式遍历,加上我们接下来解析的题目,可以基本涵盖数据结构二叉树这部分的主要内容了。还是要对其中难点好好练习。其实,在LeetCode中有几道题目就是遍历二叉树, 如94 Binary Tree Inorder Traversal 144 Binary Tree Preorde...原创 2019-05-05 00:06:13 · 647 阅读 · 0 评论 -
7.4.1 python二叉树路径问题及LeetCode题目解析(1)
二叉树从根结点到每个叶子结点都形成一条路径,当然,从任意节点到任意节点也是一条路径,这一类题目较多是我们二叉树问题的重点,也伴随着一些有难度的题目。递归遍历依次访问树中结点可以构成路径,另外前面提到后序遍历非递归写法的栈中保留当前元素的所有祖先结点。首先我们看最简单的一道题,所有路径输出:257.Binary Tree PathsGiven a binary tree, retu...原创 2019-06-02 21:16:38 · 258 阅读 · 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 · 352 阅读 · 0 评论 -
7.5 二叉查找树(BST)及平衡二叉树(AVL)的概念及基本运算
经历二叉树的重重拷问,终于来到二叉查找树,又称二叉搜索树(BinarySearchTrees)。在第6章查找算法的介绍中,我们提到了树表查找/动态表查找,BST因为关键字有序,在查找时同样高效,并且易于对关键字的插入及删除操作。二叉搜索树的基本概念二叉搜索树是一棵二叉树。这样一棵树可以使用一个链表结构表示,其中每个结点就是一个对象。除了结点中的关键字外,每个结点还包含属性left、righ...原创 2019-08-01 00:09:18 · 710 阅读 · 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 · 256 阅读 · 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 · 240 阅读 · 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 · 1013 阅读 · 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 · 108 阅读 · 0 评论 -
8.1.2 排序算法概述及python基本实现(下)
归并排序(Merge Sort)和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序...原创 2019-09-01 10:46:15 · 290 阅读 · 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 · 299 阅读 · 0 评论 -
8.2.1 (python)排序算法之链表排序LeetCode题目(1) —— Sort List & Merge k Sorted Lists
首先,在排序的题目中,我们先总结、学习一下,链表排序的问题,顺便也回忆一下链表相关操作。对应于下面两道题147.Insertion Sort ListSort a linked list using insertion sort.148.Sort ListSort a linked list inO(nlogn) time using constant space com...原创 2019-09-03 23:27:05 · 308 阅读 · 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 · 666 阅读 · 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 · 451 阅读 · 0 评论 -
6.2.2 python二分查找算法及LeetCode题目(2)之旋转的数组 —— Search in Rotated Sorted Array
这一节总结几道关于Rotated 数组的题目,涉及到LeetCode内四道相关题目:33.Search in Rotated Sorted Array81.Search in Rotated Sorted Array II153.Find Minimum in Rotated Sorted Array154.Find Minimum in Rotated Sorted Ar...原创 2019-04-09 23:40:22 · 471 阅读 · 0 评论 -
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 · 523 阅读 · 0 评论 -
python的目录/文件/文本处理概述(入门)
刚入门python语言时,往往我们重点学习的是各种工具库,各种数据结构等,跑代码时输入经常是读取标准输入,或者不需要输入。可是真正做一个项目时,对文件和文本对各种操作和处理方法就显得十分重要了,读取各种格式的文件(txt,csv...),存储各种结构的数据(一个字典,一个矩阵等),还有对目录下文件夹、文件的各种操作。。。在此,本文江对各种必要的读写、移动复制等操作进行简要概述。一、文件读写首先与标...原创 2018-05-29 21:17:11 · 638 阅读 · 0 评论 -
读取多个文件并合并为一个dataframe对象
在数据预处理时,我们要处理的df对象可能来自于不同的文件夹,此时需要我们分别处理各个文件,再将结果合并一起待后续处理,这是很常见的情况。 files = [XXXX,XXX] list_ = [] for file in files: with codecs.open(file, "r", "utf-8") as f: ...原创 2018-04-28 16:45:59 · 5020 阅读 · 2 评论 -
3.1.1 python数组双指针算法1——求和问题(LeetCode 2sum & 3sum & 4sum)
LeetCode题目中数组和字符串的占比很大。在Array(数组)和String(字符串)的题目中,很多都是用双指针去解决问题的。在此综合几道Array中双指针的题目将这一思想方法汇总学习。后续还会有双指针在其他方面的应用。双指针算法介绍在之前链表的题目中也有双指针这一思想,详情可看 python数据结构之链表——带环链表及交叉链表(双指针法),链表中的双指针与数组中不同。双指针遍历数组时...原创 2018-04-20 16:12:54 · 3916 阅读 · 5 评论 -
2.3 python数据结构之队列——应用
队列的应用明确的说确实没有栈重要,鄙人认为大概是队列的先进先出算不上一种思想,而是一种正常的思维模式,不用想到队列也可以解决。比如打印机打印文档的管理,类似的很多,其实就是大家遵守秩序排队。应用1:杨辉三角啥是杨辉三角就不解释了,这一问题用队列解决很漂亮,当然不用也行(所以说队列不那么重要)。通过队列的应用可以线性的弹出n-1行的元素并插入第n行的元素。看下面的代码,在此只打印了...原创 2018-04-18 23:10:33 · 516 阅读 · 1 评论 -
2.1 python数据结构之栈和队列——功能实现
继前面链表的学习后,接着学习栈和队列这两种线性表。链表的特点是灵活运用内存空间,对元素的操作不可直接读取,需要next的一个个找。栈和队列也是特殊的线性表,其特点是限制插入和删除元素的操作,既可以基于顺序存储也可以基于链式存储。栈关键记住,后进先出(Last In First Out),简称为LIFO线性表。其操作均在一端实现。栈的基本运算有六种:构造空栈:InitStack...原创 2018-04-07 12:07:53 · 876 阅读 · 3 评论