持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
1. 算法
数学领域的算法是用于解决某一类问题的公式和思想。
计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。
衡量算法好坏(高效、拙劣)的重要标准:
a. 时间复杂度
时间复杂度是对一个算法运行时间长短的量度,用大O表示,记作 T(n)=O(f(n))。
常见的时间复杂度按照从低到高的顺序,包括O(1)、O(logn)、 O(n)、O(nlogn)、O(n2 )等。
b. 空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量 度,用大O表示,记作S(n)=O(f(n))。
常见的空间复杂度按照从低到高的顺序,包括O(1)、O(n)、O(n2 ) 等。其中递归算法的空间复杂度和递归深度成正比。
2. 数据结构
数据结构是算法的基石,是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。
a. 线性结构
线性结构是最简单的数据结构,包括数组、链表,以及由它们衍生 出来的栈、队列。
1. 数组
数组对应的英文是array,是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素。数组是最为简单、最为常用的数据结构。
数组的基本操作
读取元素:根据下标读取元素。 eg: array[0]
更新元素: 要把数组中某一个元素的值替换为一个新值。 eg: array[5] = 10;
//创建数组
let arrayName = [1,2,3,4,5,6,7] //let arrayName = new Array() new关键字初始化数组
// 获取数据长度
let len = arrayName.length
//添加元素 添加到数组最后的位置
arrayName.push(4)
// 在数组首位插入数据
arrayName.unshift(-1)
//删除元素 最后的元素
arrayName.pop()
//删除首位元素
arrayName.shift()
// 通过splice删除数据 删除索引起始位置为5的2个元素
arrayName.splice(5, 2)
常用方法:
原数组会改变的方法
| 方法名 | 方法描述 | 举例说明 |
|---|---|---|
| push | 添加元素到数组最后的位置,并返回新长度 | 项目流程的增加、删除 =>> 数组增加对象,删除不常用,使用splice删除数据。this.sdata = {};this.nodearr = [];sdata.value = this.sname;this.nodearr.push(this.sdata) |
| unshift | 添加元素到数组首位 | |
| shift | 删除数组首位元素 | |
| pop | 删除数组最后的元素 | |
| splice | 删除或者添加任意指定位置的任意元素 | 删除当前点击删除按钮的数据 pro_data.splice(index, 1);第二个参数为0时表示不是删除数据, 而是插入数据 arrayName.splice(5, 0, 8, 7) |
| sort | 按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数 | |
| reverse | 颠倒数组中元素的顺序 |
原数组不变的方法
| 方法名 | 方法描述 | 举例说明 |
|---|---|---|
| every | 对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回true, 否则返回false | |
| some | 对数组中的每一项运行给定函数,如果任一项返回 true,则结果为true, 并且迭代结束 | 判断客户(两个或者一个)的手机号中任意一个匹配登录的手机号this.cusData.item_customer.some(item =>{return this.cusInfo.tel == item.tel}) |
| filter | 对数组中的每一项运行给定函数,该函数返回值为 true的项组成的新数组 | 需要筛选出任务列表中是普通任务的数据lists.filter(item=>item.groups == 'normal') |
| map | 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组 | |
| includes | 在数组中寻找与给定参数相等的元素,找到则返回true,找不到则返回false | 用于判断一个元素是否存在于数组中 |
| indexOf | 返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1 | 用于查找一个元素的位置 |
| lastIndexOf | 返回指定元素在数组中的最后一个的索引,如果不存在,则返回-1 | |
| slice | 传入索引值,将数组里对应索引范围内的元素作为新数组返回,但是不包括最后索引值的元素 | |
| concat | 连接数组,返回一个新数组 | |
| join | 将所有的数组元素连接成一个字符串 | |
| toString | 将数组作为字符串返回 |
2. 链表
单向链表
单向链表的每一个节点又包含两部分,一部分是存放数据的变量 data,另一部分是指向下一个节点的指针next。
双向链表
每一个节点除了拥有data 和next指针,还拥有指向前置节点的prev 指针
3. 栈
栈(stack)是一种线性数据结构,栈中的元素只能先入后出 (First In Last Out,简称FILO )。最早进入的元素存放的位置叫作栈底 (bottom),最后进入的元素存放的位置叫作栈顶 (top)。
4. 队列
队列(queue)是一种线性数据结构,队列中的元素只能先入先出 (First In First Out,简称FIFO )。队列的出口端叫作队头 (front),队列的 入口端叫作队尾 (rear)
b. 非线性数据结构
- 树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出了二叉堆之类的数据结构。
- 散列表也叫作哈希表(hash table),这种数据结构提供了键(Key) 和值(Value) 的映射关系。只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近O(1)。