算法
木_林_森
学无止境,一直在路上
展开
-
链表算法相关
反转链表时间复杂度:O(n) ,其中 nn 是链表的长度。需要遍历链表一次。空间复杂度:O(1)给定一个链表的头节点,反转链表后,最后返回新链表的头节点;const reverseList = head =>{ let prev =null; let curr =head; while(curr){ const next = curr.next; prev=curr; curr=next;} return prev;}判断链表是否有环利用快慢指针原创 2022-01-11 21:47:47 · 391 阅读 · 0 评论 -
【JS 中的数据结构-链表】
JS 中的数据结构-链表数组VS 链表单向链表双向链表循环链表数组VS 链表 在很多编程语言中,数组的初始化长度都是固定的,如果数组已被数据填满,再要加入新的元素是非常困难的。而且,对于数组的删除和添加操作,通常需要将数组中的其他元素向前或者向后平移,这些操作也是十分繁琐的。其特点:数组是一种线性数据结构数组中存储的是连续的内存空间和相同类型的数据 链表是一组节点组成的集合,每个节点都使用一个对象的引用来指向它的后一个节点。指向另一节点的引用讲做链。下面我画了一个简单的链接结构图原创 2021-12-31 14:55:46 · 644 阅读 · 0 评论 -
打乱数组(洗牌算法)
class Solution { constructor(nums) { this.nums = nums; } reset() { return this.nums; } shuffle() { let res = [...this.nums]; let len = res.length; for (let i = len - 1; i >= 0; i--) { const randIndex = Math.floor(Ma原创 2021-12-17 12:15:29 · 336 阅读 · 0 评论 -
LRU (最近最少)缓存机制
LRU 设计原则LRU 缓存机制 应该支持以下操作 获取数据 get 和 修改数据put ,获取数据 get(key) ,密钥 ( key ) 存在于缓存中,则获取密钥的值,更新key 到最新的位置,否则返回-1。写入数据 put(key, value) - 如果密钥不存在,则写入数据。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据,从而为新数据留出空间。1.数组+Objectconst LRUCache = function(capacity) { this.key原创 2021-12-17 11:56:49 · 266 阅读 · 0 评论 -
js算法相关-----持续更新
一 ,排序算法, 1.冒泡排序; function bubbleSort(arr){ const length = arr.length; let hasChange = false; if(length<=1) return arr;for(let i = 0 ; i < length-1 ;i++){ hasChange=true for(let j = 0 ; j < length-i-1; j++){ if(arr..原创 2021-04-26 15:29:51 · 118 阅读 · 0 评论