数据结构
是会飞的猪
这个作者很懒,什么都没留下…
展开
-
数据结构——二叉堆和优先队列
一、概念队列和堆都是一种数据结构,优先队列是用二叉堆实现的。优先队列和堆常用语辅助实现其它算法,例如数据压缩赫夫曼编码算法、Dijkstra最短路径算法、Prim最短生成树算法,优先队列还可以实现事件模拟、选择问题,操作系统的线程调度也使用优先队列。优先队列特点:元素正常入队,按照优先级大小出队。实现方式:有序表或无序表(即数组,或顺序表和链表)、二叉树、AVL平衡二叉树、堆和二叉堆。使用普通的表实现优先队列的性能比较低,有序表插入为O(1),无序表取出为O(n),另外使用普通二叉树实现优先队列只能原创 2020-06-20 11:30:34 · 485 阅读 · 0 评论 -
js中数组和字符串常用api总结
一、数组Array1. Array构造函数方法Array.from 常用指数:两颗星从类似数组或迭代器对象中构造函数,包括dom元素数组、集合Set、字典Map、arguments等等。2. 原地修改数组方法3. 生成新数组的方法4. 遍历方法5. 获得索引方法二、字符串String1. String构造函数方法2. 原地修改字符串方法3. 生成新字符串的方法4. 遍历方法5. 获得索引方法...原创 2020-05-29 18:32:43 · 645 阅读 · 0 评论 -
算法心得——二分查找
二分查找模板二分查找常用在有序数组中找到某个元素或插入某个元素,关于二分查找方法的详细介绍和分析可以看力扣上这一篇大神级题解:用「排除法」(减治思想)写二分查找问题、与其它二分查找模板的比较。对区间的选取不同会有很多种不同的模板,这里只把我最常用的思路模板写一下:left = 0right = arr.lenght-1while(left < right) { // 注意这里是向下取整 mid = Math.floor((left + right)/2) if(target > a原创 2020-05-24 08:42:25 · 561 阅读 · 0 评论 -
算法心得——排序
简单排序主要操作:比较两个数据项、交换两个数据项或复制其中一项,具体操作要看排序的类型。1.冒泡排序运行效率较低, 但是在概念上它是排序算法中最简单的,最适合初学的一种排序,具体思路为:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系如果左边的队员高, 则两队员交换位置向右移动一个位置, 比较下面两个队员当走到最右端时, 最高的队员一定被放在了最右边继续从最左边开始排序,把第二高的队员排到倒数第二位置上依此类推,完成排序ArrayList.prototype.bubbleSor原创 2020-05-14 23:27:53 · 680 阅读 · 0 评论 -
数据结构——树
1.前序遍历// 递归var preorderTraversal = function(root) { let res = [] let preorder = function(node) { if(!node) return res.push(node.val) preorder(node.left) preor...原创 2020-05-06 23:20:09 · 250 阅读 · 0 评论 -
数据结构——栈与深度优先遍历
栈的应用力扣739:每日温度1.递减栈的使用let Node = function(idx, val) { this.idx = idx; this.val = val;}var dailyTemperatures = function(T) { const len = T.length; if(!len) return []; let stack...原创 2020-05-04 22:44:39 · 1966 阅读 · 0 评论 -
数据结构——队列与广度优先遍历
一、队列的特点先进先出队列的应用广度优先搜索// 模板function BFS(root, target) { // 定义队列,存入根节点 let queue = [root]; // 每一层到根节点的距离 let step = 0; // 使用哈西表防止重复访问同一个节点 let hash = new Set(); hash.set(root); // 队列不为空就说明...原创 2020-05-02 22:06:58 · 1471 阅读 · 0 评论 -
一些小众算法
1.摩尔投票在一些候选人中选出得票最多的那个,分为两个阶段:对抗阶段:分属两个候选人的票数进行两两对抗抵消计数阶段:计算对抗结果中最后留下的候选人票数是否有效可看例题:力扣169:多数元素// 伪代码major = arr[0] // 保存当前票数最多候选人,初值为第一个候选人count = 1 // 当前最多候选人票数循环剩下的候选人: arr[i]当前候选人 != ...原创 2020-04-25 19:03:32 · 415 阅读 · 0 评论 -
算法心得——动态规划
二、动态规划非常重要:找状态方程原创 2020-04-21 11:46:27 · 532 阅读 · 0 评论 -
算法心得——链表
一、双指针法使用两个指针遍历链表,一般有以下几种使用情况:快指针走两步,慢指针走一步:判断链表是否有环、找到链表中点快指针先走,到一定判断条件后慢指针再走:找倒数第几个节点双指针交叉遍历两个链表:相交链表力扣141:环形链表若存在环,快慢节点总会在环中相交var hasCycle = function(head) { if(!head) return false; ...原创 2020-04-19 13:00:48 · 156 阅读 · 0 评论 -
数据结构——链表
单链表线性表的链式存储,包含两个域,一个存储的值(this.data),一个指向下一个链表节点(this.next)。封装链表类,添加链表的属性:链表节点、头部(链表的起始点)、长度。// 封装链表类 function LinkedList() { // 内部的类:节点类 function Node(data) { this.d...原创 2020-04-19 10:13:15 · 485 阅读 · 0 评论