
数据结构和算法
文章平均质量分 62
数据结构和算法基础
Ann's Blog
是个小白。啥也不会。
展开
-
P问题、NP问题、NPC问题、NPC-hard问题
1 算法时间复杂度既然能点击进来看这个问题,那99%是学过算法的,看一下几乎每个算法书都会出现的渐进符号配图。看过这副图的想必也知道算法衡量算法运行时间复杂度的量级,比如:O(log2n)<O(n)<O(nlog2n)<O(n2)<O(2n)<O(n!)O(\log_2 n)<O(n)<O(n\log_2 n)<O(n^2)<O(2^n)<O(n!)O(log2n)<O(n)<O(nlog2n)<O(n2)<原创 2021-12-26 20:47:07 · 1091 阅读 · 0 评论 -
如何计算空间复杂度 | 举个栗子:快速排序空间复杂度分析
两条原则:1、数组的长度如果你的代码里开了数组,那么数组的长度基本上就是你的空间复杂度如果是一维数组,那么长度就是元素的个数,空间复杂度就是O(n)如果是二维数组,数组的长度为n平方,那么空间复杂度就是n平方,O(n^2)如果有递归,那递归的深度就是空间复杂度的最大值如果又有递归又有数组,那两者之间的最大值就是你的空间复杂度2、递归的深度...原创 2021-12-23 18:48:08 · 1085 阅读 · 0 评论 -
JavaScript 字符串 经典面试算法
文章目录1.互为变形词2.互为旋转词3.字符串逆序3.13.24.字符串数组拼接5.填充字符串6.二叉树子树的判断7.括号匹配8.最长无重复子串需掌握的概念①回文②子串(连续)③子序列(不连续)④前缀树(Trie树)⑤后缀树和后缀数组⑥匹配⑦字典序1.互为变形词给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1...原创 2020-04-16 09:35:00 · 550 阅读 · 0 评论 -
JavaScript 斐波那契数列优化
先说一个最简单的写法了:递归:时间复杂度是O(2n),空间复杂度取决于栈的深度。 function fib(n) { if (Number.isInteger(n) === true) { if (n <= 0) { return -1 } else if(n===1||n===2){ return 1 }else { re...原创 2020-04-12 12:17:45 · 516 阅读 · 0 评论 -
JavaScript 排序 经典面试算法
目录看我啦简略说一下知识点了时间复杂度空间复杂度稳定性面试题目1.合并有序数组2.需要排序的最短数组长度3.荷兰国旗问题面试高频排序算法 源码快速排序堆排序简略说一下知识点了这是一篇面试算法文章!!!这篇文章不适合零基础!!!零基础的先去学排序!!!????排序算法时间复杂度O(n2):插入排序、冒泡排序、选择排序O(nlog2n):快速排序、堆排序、归并排序O(n):基数排序、计数排序...原创 2020-04-03 23:58:23 · 460 阅读 · 0 评论 -
JavaScrip 判断数组元素 | 位运算 经典面试算法
文章目录如何找出数组中唯一的重复元素方法1方法2方法3判断数组中是否有重复值方法1方法2如何找出数组中唯一的重复元素题目描述:数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?分析:从题目的描述可以发现,本题的目标就是在一个有且仅有一...原创 2020-04-03 23:55:42 · 433 阅读 · 0 评论 -
JavaScript 二分查找 经典面试算法
二分查找的思路很简单,就不叙述了,考的也不是思路,重点是应用。二分查找不止可以用于有序数组,在特定情况下也可以用于无序数组。在无序数组的情况下应用题目要求:给定一个无序数组arr,已知任意相邻的两个元素值都不重复。请返回任意一个局部最小的位置。所谓局部最小的位置是指:如果arr[0]<arr[1],那么位置0就是一个局部最小的位置。如果ar[N-1](也就是arr最右的数)...原创 2020-04-03 14:05:03 · 499 阅读 · 0 评论 -
希尔排序复杂度详细分析(翻译来源:Hans Werner Lang教授)
来源:H.W. Lang Hochschule Flensburg lang@hs-flensburg.de Impressum Datenschutz © Created: 29.01.1998 Updated: 04.06.2018希尔排序是最古老的排序算法之一,以其发明者D.L.Shell(1959年)命名[She 59]。虽然该算法速度快,易于理解,易于实现。...翻译 2020-01-09 15:01:58 · 7762 阅读 · 10 评论 -
排序——选择排序(简单选择排序、堆排序)
这是排序部分的第二篇文章,其他的排序方法可以点击下面的传送门(•͈ᴗ•͈ૢૢ)❊⿻*排序——插入排序(直接插入排序、希尔排序、折半插入排序)排序——插入排序(交换排序、快速排序)文章目录简单选择排序(simple selection sort)排序过程代码算法分析实例快速排序(quick sort)排序过程代码算法分析实例简单选择排序(simple selection sort)基...原创 2020-01-03 13:40:04 · 900 阅读 · 0 评论 -
排序——交换排序(冒泡排序、快速排序)
这是排序部分的第二篇文章,其他的排序方法可以点击下面的传送门(•͈ᴗ•͈ૢૢ)❊⿻*1.排序——插入排序(直接插入排序、希尔排序、折半插入排序)文章目录冒泡排序(bubble sort)排序过程代码算法分析实例冒泡排序(bubble sort)冒泡排序又称起泡排序,基本思想是两两比较相邻记录的关键码,如果反序则交换。排序过程将整个待排序的记录序列划分成有序区和无序区,初始时有序区为空...原创 2020-01-02 14:00:32 · 562 阅读 · 0 评论 -
排序——插入排序(直接插入排序、希尔排序、折半插入排序)
排序这个文章我本来想写一篇的,但是想了想太长了,最后我还是决定拆开来写吧。第一部分主要是讲插入排序的,包括直接插入排序和希尔排序。直接插入排序基本思想: 依次将待排序序列中的每一个记录插入到一个已排好序的序列中,直到全部记录都排好序。解读: 可以想一下打扑克的时候,每抓到一张牌就会插入到你手中已经按顺序理好的牌中。排序过程:(1)将整个待排序的记录划分为有序区和无序区,初始时有序区为待...原创 2020-01-01 21:39:32 · 2739 阅读 · 2 评论 -
排序算法整理
文章目录排序的概念插入排序直接插入排序排序的概念1. 排序的定义简言之:排序是将一个记录的任意序列重新排列成一个按关键码有序的序列。具体地说:给定一个记录序列(r1、r2、…、rnr_1、r_2、…、r_nr1、r2、…、rn)其关键码分别为(k1、k2、…、knk_1、k_2、…、k_nk1、k2、…、kn),……2.算法的稳定性假设在待排序的记录序列中有多个具有相同关键...原创 2020-01-03 13:47:25 · 574 阅读 · 0 评论 -
树的高度和深度 | 结点的高度和深度
有个缺点,看到什么东西不管是不是重点只要说不通总是爱钻牛角尖。对于 树的高度和深度(以及结点的高度和深度) 看了几本不同的书,都有各自的说法,多方查证吧,花了很多时间,最后归纳一个能说服我的说法吧。(´。• ᵕ •。`) ♡树的高度和深度深度是从上往下定义的,从根结点开始数,高度是从下往上定义的,从叶子结点开始数。这个涉及到结点的层数,有的教材规定根结点在第0层,有的则规定根结点在第一层。...原创 2018-11-16 16:46:20 · 122274 阅读 · 59 评论 -
栈和卡特兰数(Catalan number)
文章目录1.栈与卡特兰数的关系2.卡特兰数3.1.栈与卡特兰数的关系栈是计算机中经典的数据结构,我们也会遇到一个常见的问题:一共有多少种合法的出栈顺序?先说一下什么是合法的出栈序列, 凡是合法序列都遵循以下规律:即对于出栈序列中的每一个数字,在它后面的、比它小的所有数字,一定是按递减顺序排列的。例如:有数字1 2 3 4 依次入栈,那么他们的出栈顺序中:4321合法:4后面比它小的数是...原创 2018-10-16 19:53:43 · 8406 阅读 · 5 评论 -
前缀表达式 | 中缀表达式 | 后缀表达式
看题目有点深奥的样子,然而弄明白之后也就那么回事。 (´-ι_-`)虽然我刚开始根本没弄懂……中缀表达式 中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间。其实说白了,我们平时写的式子都是中缀表达式,就是说运算符位于要计算的两个数中间。中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。前缀表达式和后缀表...原创 2018-03-18 21:43:17 · 857 阅读 · 0 评论