数据结构与算法
lgy54321
这个作者很懒,什么都没留下…
展开
-
递归
递归定义程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。条件边界条...原创 2018-12-13 18:13:41 · 127 阅读 · 0 评论 -
树--层次遍历二叉树
102. Binary Tree Level Order TraversalFor example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7return its level order traversal as:[ [3], [9,20], [15,7]...原创 2019-05-28 14:00:16 · 140 阅读 · 0 评论 -
树--给定二叉搜索树(BST)和target
[653. Two Sum IV - Input is a BST(https://leetcode.com/problems/two-sum-iv-input-is-a-bst/)题目描述给定二叉搜索树(BST)和target。如果BST存在两个元素和为target,返回true;否则返回false例子 略 思想 (法1、2 - 借助辅助字典,没有用到BST这个条件) 两个数的和为ta...原创 2019-05-28 14:21:57 · 249 阅读 · 0 评论 -
树--给定二叉树的两个节点,找到它俩的最低公共祖先
236. Lowest Common Ancestor of a Binary TreeGiven the following binary tree: root = [3,5,1,6,2,0,8,null,null,7,4] Example 1:Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1Output: 3...原创 2019-05-28 19:09:42 · 251 阅读 · 0 评论 -
动态规划--字符串的编辑距离(LeetCode: 72. Edit Distance)
72. Edit Distance问题描述:给定两个字符串A和B,要用最少的操作将字符串A转换成字符串B。其中字符串操作包括:(1)删除一个字符(Insert a character)(2)插入一个字符(Delete a character)(3)修改一个字符(Replace a character)将字符串A转换成B串所用的最少字符操作数称为字符串A到 B的编辑距离,又称为Leven...原创 2019-06-10 21:55:05 · 264 阅读 · 0 评论 -
幸存者游戏
有n个同学围成一圈,其id依次为1~n(n号挨着1号)。现在从1号开始报数,第一回合报到m的人就出局,第二回合从出局的下一个人开始报数,报到m2的同学出局。以此类推,直到最后一个回合报到mn−1的人出局,剩下最后一个同学。输出这个同学的编号。输入格式共一行,包含两个整数n和m。输出格式输出最后剩下的同学的编号。数据范围n≤15,m≤5输入样例:5 2输出样例:5`inn...原创 2019-07-02 18:50:15 · 686 阅读 · 0 评论 -
整理书架(逆序对)
题目图书管理员小P每天要整理书架,一个书架有N排,每一排书架上能摆放k本书,每本书上都有索引的数字编号,例如1,5,7等等。小P喜欢从数字编号排列最整齐的书架开始整理,因为这样的话这排书架上的书就不用整理,按照整齐程度整理,最后整理最不整齐的那排书架。那么能否请机智的你帮助小P找出整理书架的顺序呢?整齐程度的定义:每排书架中书的编号存在的逆序对越少,这排书架就越整齐,一排书架中若书的编号完...原创 2019-07-03 22:29:25 · 515 阅读 · 0 评论 -
飞机最低可俯冲高度(DP)
提议近日,埃航空难的新闻牵动了无数人的心。据悉,空难很可能是由于波音737MAX飞机的失速保护系统错误触发所致。在飞机进行高空飞行时,驾驶辅助系统如果检测到飞机失速,无法维持足够的飞行升力,会压低机头进行俯冲,以重新获得速度,进而获取足够的飞行升力,维持飞行高度。但是在飞机进行低空飞行时,触发俯冲机制极有可能在飞机还未获得足够飞行速度并上升之前已经撞击地面。鉴于半年内的两起事故,波音公司...原创 2019-07-04 13:08:46 · 1565 阅读 · 0 评论 -
算法和算法分析
算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法的定义:是对特定问题求解步骤的一种描述。算法是指令的有限序列,其中每条指令表示一个或多个操作。算法的五大特性输入: 算法具有0个或多个输入输出: 算法至少有...原创 2019-07-05 14:13:52 · 869 阅读 · 0 评论 -
线性表:线性表的顺序储存结构
在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。这样的一组序列元素的组织形式,我们可以将其抽象为线性表。...原创 2019-07-05 14:55:50 · 613 阅读 · 0 评论 -
线性表:线性表的链式存储结构
文章目录链表链表的定义单链表头结点和头指针节点实现单链表的操作头部添加元素尾部添加元素指定位置添加元素删除节点查找节点是否存在完整代码链表与顺序表的对比链表链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。单链表概念: 用一组地址任意的存储单元存放线性表中...原创 2019-07-06 14:50:57 · 552 阅读 · 0 评论 -
栈 队列 数组
文章目录栈栈的类型定义栈的基本操作Push(&S,e)Pop(&S,&e)数组实现栈用链表实现栈两种方法的对比队列用数组实现队列用链表实现队列两种方法的对比数组关于数组的动态扩容以及增删改查栈栈的类型定义栈的基本操作Push(&S,e)初始条件:栈S已存在操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈已存...原创 2019-07-06 15:47:17 · 557 阅读 · 0 评论 -
图:定义与存储
文章目录图的定义与基本术语图Graph的定义ADT图的存储结构图的定义与基本术语图Graph的定义图是一种网状数据结构,形式化定义如下:集合DataObject中的所有元素具有相同的特性,V中数据元素常称为顶点(vertex),VR是两个顶点之间关系的集合,P(x,y)表示x和y之间有特定的关联属性P。若<x,y>∈R <x,y>,则 <x,y>表示...原创 2019-07-11 20:53:10 · 156 阅读 · 0 评论 -
树- 二叉树
文章目录树的类型定义查找类(引用型操作):插入类:删除类:有向树:二叉树二叉树的定义二叉树的重要特性两类特殊的二叉树满二叉树:深度为k 且含有 2^k-1个结点的二叉树。完全二叉树:二叉树的遍历问题的提出先左后右的遍历算法先序遍历算法:中序遍历算法:后序遍历算法:算法的递归和非递归版本先序遍历1.递归版非递归中序遍历递归版非递归后续遍历递归版非递归构造二叉树二叉树的先序和中序序列建树中序和后序算法...原创 2019-07-07 15:13:34 · 312 阅读 · 0 评论 -
十大排序算法(python)
文章目录十大排序算法排序算法介绍非线性时间比较类排序:线性时间非比较类排序:相关概念交换排序1冒泡排序(Bubble Sort)2 快速排序(Quick Sort)插入排序3 简单插入排序(Insert Sort)4希尔排序(Shell Sort)选择排序5.简单选择排序(Select Sort)十大排序算法排序算法介绍非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度...原创 2019-07-25 16:14:37 · 305 阅读 · 0 评论 -
树—判断它是否是二叉树的前序遍历序列化
331. Verify Preorder Serialization of a Binary Tree题目描述利用前序遍历序列化二叉树时,遇到非空结点时,记录结点的值;如果是空节点,用#记录。 给定一个逗号分隔的字符串,判断它是否是二叉树的前序遍历序列化。不需重建二叉树例子 Example 1:Input: "9,3,4,#,#,1,#,#,2,#,6,#,#" Output: tr...原创 2019-05-28 13:51:35 · 783 阅读 · 0 评论 -
动态规划--最大连续子序列和
53最大连续子序列和题目描述最大连续子序列和。(至少包含一个数组)例子Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.思想 法1 - DP。dp[i]表示以i位置结尾的最大值,dp[i] = max(dp[i-1] + nums[i], nums[i...原创 2019-05-30 19:59:27 · 281 阅读 · 0 评论 -
二分-69. Sqrt(x)
69sqrt题目描述实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。例子Example 1: Input: 4 Output: 2Example 2: Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842…,...原创 2019-05-26 15:23:35 · 117 阅读 · 0 评论 -
二分-34. Find First and Last Position of Element in Sorted Array
34. Find First and Last Position of Element in Sorted Array题目描述给定一个按照升序排列的整数数组 nums和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。例子Example 1: Input: nums =...原创 2019-05-26 16:04:42 · 131 阅读 · 0 评论 -
二分-74. Search a 2D Matrix 240. Search a 2D Matrix II
74. Search a 2D MatrixWrite an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:Integers in each row are sorted from left to right.The firs...原创 2019-05-26 16:41:14 · 189 阅读 · 0 评论 -
二分-153. Find Minimum in Rotated Sorted Array 162. Find Peak Element
153. Find Minimum in Rotated Sorted Array题目描述假设按照升序排序的数组,在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。(假设数组中不存在重复元素)例子Example 1: Input: [3,4,5,1,2] Output: 1Ex...原创 2019-05-26 17:05:27 · 112 阅读 · 0 评论 -
栈-155. Min Stack
[155. Min Stack(https://leetcode.com/problems/min-stack/description/)题目描述设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中pop()–移除栈顶元素top()–得到栈顶元素getMin()–得到栈中最小元素例子MinStack minS...原创 2019-05-26 22:23:41 · 99 阅读 · 0 评论 -
树--101.镜像树
[101. Symmetric Tree(https://leetcode.com/problems/symmetric-tree/)题目描述判断是否是镜像二叉树(对称)例子 略思想 (递归) 定义一辅助函数,输入为left和right,判断是否相等。 (迭代) 定义两个栈,层次遍历时判断,并分别从左向右和从右向左存储。解法1 递归# Definition for a bin...原创 2019-05-27 16:46:15 · 266 阅读 · 0 评论 -
leetcode-链表
文章目录链表第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题双向链表链表第一题解法[边界] - n的取值范围是1-链表长度,边界为n=1和n=链表长度[思路] - 要求移除倒数第n个,考虑双指针:指针1先移动n+1步,指针2再移动(指针1指向None时,指针2刚好指向倒数第n+1个结点)[改进] - 对于边界n=链表长度时,指针1移动n+1...原创 2019-05-23 13:23:47 · 130 阅读 · 0 评论 -
数据结构之串
匹配朴素匹配KMP匹配原创 2019-05-23 14:28:03 · 130 阅读 · 0 评论 -
038-Count and Say
038-Count and Say报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "on...原创 2019-05-23 15:20:51 · 199 阅读 · 0 评论 -
树-最大深度
104. Maximum Depth of Binary Tree题目描述二叉树的最大深度例子 略 思想 (递归) 最大深度等于左右子树的最大深度加1。 (非递归) 层次遍历解法1 递归# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# ...原创 2019-05-27 20:27:37 · 520 阅读 · 0 评论 -
串--49. Group Anagrams
leetcode 49. Group Anagrams使用【python】求解题目:Given an array of strings, group anagrams together.For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],Return:[[“ate”, “eat”,“tea”],[“nat”,“...原创 2019-05-23 15:57:42 · 101 阅读 · 0 评论 -
串--165. Compare Version Numbers
[165. Compare Version Numbers(https://leetcode.com/problems/compare-version-numbers/)Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 < version2 r...原创 2019-05-23 16:37:56 · 99 阅读 · 0 评论 -
树--二叉树的后序遍历
[145. Binary Tree Postorder Traversal(https://leetcode.com/problems/binary-tree-postorder-traversal/)题目描述二叉树的后序遍历思想 (递归)(迭代) 先找到后序遍历的逆序根右左,然后再求得后序遍历。解法1 左右根,递归。# Definition for a binary tre...原创 2019-05-28 11:03:55 · 290 阅读 · 0 评论 -
树--给定前序和中序遍历,重构二叉树。
105. Construct Binary Tree from Preorder and Inorder Traversal题目描述给定前序和中序遍历,重构二叉树。思想 前序 - 根左右;中序 - 左右根 (递归)解法# Definition for a binary tree node.# class TreeNode(object):# def __init__(...原创 2019-05-28 11:13:47 · 183 阅读 · 0 评论 -
常用的查找算法(python)
文章目录基本概念无序表查找有序表查找线性索引查找稠密索引分块索引倒排索引五、二叉排序树平衡二叉树散列表(哈希表)散列函数的构造方法处理散列冲突散列表查找性能分析基本概念查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(Search Table):由同一类型的数据元素(或记录)构成的集合关键字(Key):数据元素中某个数据项的值...原创 2019-07-22 16:34:40 · 218 阅读 · 0 评论