数据结构和算法
算法数据结构很重要
王噶一啊一
新手新学,仅来记录学习过程
展开
-
无重复字符的最长子串
题目解法一: 维护数组var lengthOfLongestSubstring = function(s) { let arr = [], max = 0 for(let i = 0; i < s.length; i++) { let index = arr.indexOf(s[i]) if(index !== -1) { arr.splice(0, index+1); } arr.push原创 2020-10-03 10:23:36 · 62 阅读 · 0 评论 -
c++(引用, 内联函数,constexpr函数,带有参数值的函数)
C++引用1. 什么是引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。2. C++ 引用 vs 指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。我们可以为 i 声明引用变量,如下所示:int& r =原创 2020-07-15 08:38:54 · 280 阅读 · 0 评论 -
(js描述的)数据结构[树结构之红黑树](13)
1.二叉送搜索树的缺点:2.红黑树难度:3.红黑树五大规则:4.红黑树五大规则的作用:5.红黑树二大变换:1)变色2)旋转6.红黑树的插入五种变换情况:先声明--------插入的数据都是红色!!1) 插入的位置是 根节点 , 直接插入根节点位置,并且把 颜色变为黑色。2) 插入的...原创 2020-04-09 17:45:30 · 201 阅读 · 0 评论 -
(js描述的)数据结构[树结构1.2](12)
1.先序遍历2.中序遍历3.后序遍历4.原创 2020-04-08 12:21:30 · 104 阅读 · 0 评论 -
递归和尾递归的区别
非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。递归(迭代):recsum(5)5 + recsum(4)5 + (4 + recsum(3))5 + (4 + (3 + recsum(2)))5 + (4 + (3 + (2 + recsum(1))))5 + (4 + (...原创 2020-04-07 21:44:30 · 159 阅读 · 0 评论 -
递归的理解
递归的三大要素第一要素:明确你这个函数想要干什么对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。例如,我定义了一个函数// 算 n 的阶乘(假设n不为0)int f(int n){}这个函数的功能是算 n 的阶乘。好了,我们已经定义了一...原创 2020-04-07 21:08:18 · 113 阅读 · 0 评论 -
(js描述的)数据结构[树结构1.1](11)
1.树结构:我们不能说树结构比其他结构都要好,因为每种数据结构都有自己特定的应用场景。但是树确实也综合了上面的数据结构的优点(当然有点不足于盖过其他的数据结构,比如效率一般情况下没有哈希表高)并且也弥补了上面数据结构的缺点。2.而且为了模拟某些场景,我们使用的树结构或更加方便。因为树结构的非线性,可以表示一对多的关系。比如文件的目录结构。3.一般树的抽象4.儿子-兄弟表示...原创 2020-04-06 11:07:49 · 117 阅读 · 0 评论 -
(js描述的)数据结构[哈希表1.3](10)
1.哈希表的完善1.容量质数(limit):需要恒为质数,来确保元素的均匀分布。1)普通算法: 判断一个数是否为质数 function isPrime(num) { for (var i = 2; i < num; i++) { if (num % i == 0) { return false } } return true }升级算法:只需要判断到...原创 2020-04-05 12:10:14 · 209 阅读 · 0 评论 -
(js描述的)数据结构[哈希表1.2](9)
一. 优秀的哈希函数1.快速的计算: 需要快速的计算来获得对应的hashCode(霍纳法则来减少乘除次数)2.均匀的分布: 尽可能将元素映射到不同的位置,让元素在哈希表中均匀分布二.哈希表的扩容三.哈希函数的实现 // 封装哈希表 function HashMap() { //属性 this.storag...原创 2020-04-05 11:39:00 · 88 阅读 · 0 评论 -
(js描述的)数据结构[哈希表1.1](8)
(js描述的)数据结构[哈希表](8)一.数组的缺点1.数组进行插入操作时,效率比较低。2.数组基于索引去查找的操作效率非常高,基于内容去查找效率很低。3.数组进行删除操作,效率也不高。二.哈希表1.几乎所有的编程语言都有直接或间接的应用这种数据结构2.哈希表是基于 数组 实现的,但相对于数组有很多优势。1.它可以提供非常快速的 插入-删除-查找 操作2.无论多少数据,插入和删...原创 2020-04-04 13:31:19 · 105 阅读 · 0 评论 -
(js描述的)数据结构[字典](7)
(js描述的)数据结构[字典](7)一.字典的特点1.字典的主要特点是一一对应关系。2.使用字典,剋通过key取出对应的value值。3.字典中的key是不允许重复的,而value值是可以重复,并且字典中的key是无序的。字典和映射关系; 字典和数组; 字典和对象;二.代码实现字典function Dictionary() { this.dic = {} ...原创 2020-04-04 09:12:56 · 136 阅读 · 0 评论 -
(js描述的)数据结构[集合结构](6)
(js描述的)数据结构[集合结构](6)一.集合结构特点1.集合中的元素不能重复。2.集合是无序的。二.集合的代码实现function Set() { this.items = {} //1. add方法 Set.prototype.add = function(value) { /...原创 2020-04-03 11:55:56 · 68 阅读 · 0 评论 -
(js描述的)数据结构[双向链表](5)
(js描述的)数据结构[双向链表](5)一.单向链表的缺点1.只能按顺序查找,即从上一个到下一个,不能反过来。二.双向链表的优点1.可以双向查找三.双向链表的缺点1.结构较单向链表复杂。2.占用内存比单项链表多。四.双向链表的结构五.双向链表的代码实现function DoublyLinkedList() { // 内部节点类 ...原创 2020-04-02 21:04:32 · 106 阅读 · 0 评论 -
(js描述的)数据结构[链表](4)
(js描述的)数据结构 [链表](4)一.基本结构二.想比于数组,链表的一些优点1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理。2.链表不必再创建时就确定大小,并且大小可无限的延申下去3.链表再插入和删除数据时,比数组的效率高很多三.相比于数组,链表的一些缺点1.链表访问任何一个位置的元素时,都需要从头开始访问2.无法通过下标直接访问元素,需要从头开...原创 2020-04-02 12:15:51 · 78 阅读 · 0 评论 -
(js描述的)数据结构[队列结构,优先级队列](3)
(js描述的)数据结构[队列结构](3)一.队列结构的特点:1.基于数组来实现,的一种受限的线性结构。2.只允许在表头进行删除操作,在表尾进行插入操作。3.先进先出(FIFO)二.队列的一些应用:1.按一定顺序打印文档,执行输出后的结果。2.多线程的实际执行顺序,就如队列结构相似。三.队列的封装:function Queue() { this.items = []...原创 2020-03-31 15:03:28 · 83 阅读 · 0 评论 -
(js描述的)数据结构[栈结构](2)
(js描述的)数据结构[栈结构](2)一.什么是栈结构1.一种受限制的线性结构,这种结构可以基于数组来实现。2.可以抽象成一个容器,上面的是栈顶,底下的是栈底。所以仅允许对栈顶进行操作,二.栈结构的应用1.函数式调用栈:基于栈的形式来进行函数的整体调用。2.递归:栈溢出就是其中的一点。三. 栈结构常见的操作push(): 添加一个元素到栈顶。pop(): 移除栈顶的元素。pe...原创 2020-03-30 22:01:50 · 90 阅读 · 0 评论 -
(js描述的)数据结构 [数组的一些补充](1)
(js描述的)数据结构 [数组的一些补充](1)1. js的数组: 1.优点:高度封装,对于数组的操作就是调用API2.普通语言的数组:1.优点:根据index来查询,修改数据效率很高2.缺点: *普通的数组不支持存放不同的数据类型,所以在对普通数组进行封装的时候一般用对象(例如: java ArrayList)。 *普通数组的删除,中间插入等操作效率很低。 *普通的数组不支...原创 2020-03-28 22:36:52 · 66 阅读 · 0 评论