js数据结构和算法
数据结构和算法学习
luckybing~
一个积极向上、乐观开朗、遇到Bug想一晚上、没秃顶、会写段子的web前端工程师
展开
-
二叉树广度优先遍历/深度优先遍历
// 二叉树结构:// 1// / \// / \// 2 3// / \ / \// 4 5 6 7广度优先遍历:一层一层的遍历1 ---> 2 ----> 3 -----> 4 -----> 5 ------> 6 ------> 7首先把这棵树用js表示出来:let tree = { val: 1, left: { val: 2, .原创 2020-12-20 16:54:50 · 248 阅读 · 0 评论 -
js 排序算法分析与对比
主要分析点:时间复杂度、空间复杂度、稳定性(一)时间复杂度用大O来表示时间复杂度时间复杂度一般指时间复杂性。在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间时间复杂度首先算出代码的执行次数(1) O(1)function test (num) { console.log(num) // 执行1次 console.log(num + 1) // 执行1次}test(3)比如执行 test 这个函数,T(n) = 2.原创 2020-12-20 14:16:25 · 164 阅读 · 1 评论 -
快速排序
经典快速排序总是指定数组或者某部分的最后一个元素作为基准值,随机快速排序指定数组或者某一部分中的随机值作为基准值。原创 2020-12-13 19:53:14 · 153 阅读 · 0 评论 -
判断一个数是不是质数
(一) 常规法function isPrime(number) { if (typeof number !== 'number' || number<2) { // 不是数字或者数字小于2 return false; } if (number === 2) {//2是质数 return true; } else if (number % 2 === 0) {//排除偶数 return false; } var原创 2020-12-05 10:51:32 · 345 阅读 · 0 评论 -
数组中的子数组、子序列 字符串的子串、子序列
刷 leetcode 用到了https://blog.csdn.net/chl183/article/details/107893440原创 2020-12-04 19:03:34 · 256 阅读 · 0 评论 -
leetcode(刷题总结)
1. 字符串查找,字符串比较大小比较的时候,从字符串左边开始,依次比较每个字符,直接出现差异、或者其中一个串结束为止。( 比较ASCII码 )比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大2. 求交集/** * @param {number[]} nums1 * @param {number[]} nums2 * @原创 2020-12-03 23:15:37 · 145 阅读 · 0 评论 -
leetcode 之 链表
1. 链表中倒数第 K 个节点设置快慢两个指针,首先他们 都是 head,快的先走 k - 1 步,然后快慢一起走,一步一步走,快的走到终点,此时慢的就是所求的值var kthToLast = function(head, k) { var showLink = head var fastLink = head // 快指针先走k-1步 while (k > 1) { fastLink = fastLink.next k-- } // 当快指针到达原创 2020-12-02 15:06:42 · 201 阅读 · 0 评论 -
数据结构与算法 之 滑动窗口
(一)介绍滑动窗口法,也叫尺取法(可能也不一定相等,大概就是这样 ),可以用来解决一些查找满足一定条件的连续区间的性质(长度等)的问题。由于区间连续,因此当区间发生变化时,可以通过旧有的计算结果对搜索空间进行剪枝,这样便减少了重复计算,降低了时间复杂度。往往类似于“请找到满足xx的最x的区间(子串、子数组)的xx”这类问题都可以使用该方法进行解决(二)目的减少 while 循环(三)主要思路滑动窗口特点:找不同例如:与上一次相比,本次删除了第一个元素,向后添加了一个元素删原创 2020-12-01 15:55:19 · 465 阅读 · 0 评论 -
数据结构算法 之 二分查找法(LC)
(一)定义二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。(3)如果某一步数组为空,则表示找不到目标元素。二分法查找的时间复杂度O(logn)(二)适用条件排好序的数组(三)注意的几点1. 双指针中间数值 indexva原创 2020-11-30 16:36:21 · 2110 阅读 · 0 评论 -
数据结构与算法 之双指针
(一)定义双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。(二)用法(1)对撞指针 适用于有序数组,也就是说当你遇到题目给定有序数组时,应该第一时间想到用对撞指针解题。function fn (list) { var left = 0; var right = list.length - 1; //遍历数组 while (left <= right) {原创 2020-11-30 14:33:00 · 297 阅读 · 0 评论 -
js数据结构和算法 --- 散列表
(一)哈希表(散列表)在这个例子中,将名称转化为 ASCII 码 求和 将 value 存储到 和的位置 找 Jobs 的邮箱找数组的398项就行(二)代码实现// 散列函数 key -> number -> items[number] = value class HashTable { constructor () { this.items = [] } // 通过 AscII 转化方式 字母.charCode.原创 2020-07-09 17:58:40 · 212 阅读 · 0 评论 -
js数据结构与算法 --- 字典
(一)字典的主要操作原创 2020-07-07 17:09:49 · 130 阅读 · 0 评论 -
JS数据结构和算法 ---- 双向链表、循环链表
(一)双向链表通过给每一个Node对象增加一个previous属性,存储前一个节点,所以在一个双向链表中,不仅存储着上一个元素,还要存储本身和下一个元素(二)代码演示<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">原创 2020-07-04 16:48:08 · 134 阅读 · 0 评论 -
js数据结构算法---优先队列、双向队列
(一)什么是优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。比如:医院急诊室,医生会根据患者的病情严重程度,给患者一个优先级码,当医生空闲时,候诊区优先级最高的患者最先就诊队列出栈时,优先级高的先与优先级低的同样优先级的,按照入栈顺序出栈(二)代码实现优先队列与队列不同的是,每一各元素需要一个co.原创 2020-07-04 14:07:22 · 276 阅读 · 0 评论 -
JS数据结构算法----列表
(一)列表的操作(二)实现列表类(利用数组实现)原创 2020-07-04 12:46:24 · 203 阅读 · 0 评论 -
js 数据结构算法 --- 图
用途:可以用来做地图、还可以用来模拟社交(一)图的基本概念:有向图标明了连接方向,不能逆着方向无向图只表明链接关系 没有方向,只要连接就可以通(二)图的表示方式1.邻接矩阵1 表示链接 0表示无连接 对角线永远是0 自己不能跟自己链接计算机以 邻接矩阵的方式 来存储2. 邻接表(三)代码转化顶点是一个数组,数组里面存放了所有的元素边是一个对象,里面是 顶点与边的映射关系例子如下图:class Graph { con..原创 2020-06-30 00:02:06 · 317 阅读 · 0 评论 -
js数据结构之树(tree)
典型的:HTML 就是一个树结构(一)二叉树特点:1. 每一个父结点都有两个子结点2. 左侧子节点存储比父结点小的值,右侧子节点存储比父结点大的值操作:增删改查代码:// 定义Node节点 class Node { constructor (value) { this.value = value, this.left = null, this.right = null } }原创 2020-06-29 22:28:07 · 882 阅读 · 0 评论 -
集合
<script> // 定义集合方法 其实就是 key value 相同的对象 var newSet = function () { var items = {} // 集合中是否有该元素 this.has = function (value) { return items.hasOwnProperty(value) // hasOwnProperty 无法判断继承属性 如toString、valueOf 用法 .原创 2020-06-26 22:06:12 · 111 阅读 · 0 评论 -
js数据结构和算法-----链表
链表像是一个火车,每一个 node 就像是一节火车厢,它不仅要携带自己的信息 (item),还要与下一节火车厢相连(next)(一)链表的操作1. 插入元素 insert2. 尾部添加元素 append3. 获取元素索引 indexOf4. 从链表中移除一项~remove(element)5. 从链表中特定 位置 移除一项~ removeAt(position)...原创 2020-06-26 21:56:34 · 636 阅读 · 0 评论 -
数据结构之排序
(一)冒泡排序一, 冒泡排序:从左到右,数组中相邻的两个元素进行比较,将较大的放到后面。算法思路:两层循环,第一层控制循环的边界,(索引相关)第一次边界是数组长度减一,第一次循环完,找到数组最大值放在最后第二次边界是数组长度减二,第二次循环完,找到数组第二大值,放在倒数第二位,也就是该次循环的最后....第二层循环,从0开始遍历,遍历到当前边界,与它后面的进行比较,如果大于后面的值,两者交换位置// 第一次遍历到数组最后一个,把最大值放在最后 // 第二次遍历到倒数第原创 2020-06-22 09:55:07 · 154 阅读 · 0 评论 -
满足条件的元素索引数组
var indexArr = [] var index = 0 while (index <= arr.length - 1) { var index = arr.indexOf(0, index) if (index > -1) { indexArr.push(index) } else { break } ++index } ...原创 2020-06-20 15:02:57 · 308 阅读 · 0 评论 -
js 最大公约数 最小公倍数
1. 两个数的最大公因数// 求两个数的最大公约数 辗转相除法 // 最坏的结果 两个数的最大公约数是1 function gcd (a, b) { if (b === 0) { return a } else { return arguments.callee(b, a%b) // 余数 } }辗转相除法原理:https://blog.csdn.net/weixin_43886797/article/de原创 2020-06-20 13:03:08 · 331 阅读 · 0 评论 -
leetcode
每天一道算法题 头秃不是事输入数组的每一项都跟第一项做比较,第一个是F,剩下每一项的第一个是不是F,是 存档 不是退出循环 返回结果<script> var longestCommonPrefix = function(arr) { if (arr.length === 0) { return '' } else { var result = '' var baseString = arr[0]原创 2020-06-15 22:24:10 · 126 阅读 · 0 评论 -
二分查找法(数组相关)
背景需求:给定一个有序数组(不是有序数组不能用二分查找法)以及一个值,如果查找成功返回目标的索引值;否则返回-1。当待搜索的集合是相对静态的数据集时,此时使用二分查找是最好的选择。主要考虑的点:边界值的处理思路:开始时,先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或者数据集不能再分割。图解:left、right 表示索引原创 2020-06-14 13:53:27 · 425 阅读 · 0 评论 -
js数据结构和算法-----队列
(一)队列队列与栈不同,栈是 后进先出,队列是先进先出(二)队列的操作1. 入列 (enqueue):向数组最后增加元素2. 出列 (dequeue) : 删除数组的第一个元素3. 查看列头 (front) : 查看数组的第一个元素(三) 使用数组实现队列结构队列代码:const Queue = function () { var item = []...原创 2019-09-05 14:50:31 · 155 阅读 · 0 评论 -
js数据结构和算法---- 栈
栈的作用:在编程语言的 编译器 和 内存 中保存变量 、方法调用1. 栈是一种后进先出的数据结构2. 最下面的叫栈底, 最上面的叫栈顶3. 进 叫 入栈,出 叫 出栈4. 进 ----> push()出 -----> pop()检查栈顶元素 -----> peek()是否为空 ------> isEmpty()清空栈 -----> c...原创 2019-09-03 15:26:39 · 204 阅读 · 0 评论