![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JS数据结构与算法
文章平均质量分 80
JS数据结构与算法
可达鸭头上站青蛙
至妙之要,先存后忘。
展开
-
js贪心算法入门级教程,钱币找零(零钱兑换)问题解析
,可知,这是一个每次选择都需要最优子结构问题,因为如果不是最优子结构,那找零所需的钱币数量便不是最少的。例如我需要找零101元,正常最优选择为100元1张,1元1张,这样找零所需钱币才是最少的2张,是最优子结构;当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。贪心算法所作的贪心选择可以依赖于以往所作过的选择,但决不依赖于将来所作的选择,也不依赖于子问题的解。原创 2023-03-25 15:22:13 · 2236 阅读 · 2 评论 -
js分治法入门级教程,二分搜索的解法
二分搜索法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(log n) 完成搜索任务。数组必须是一个有序数组,如 [1, 2, 3, 4, 5, 6, 7, 8, 9]搜索时从数组中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果中间元素大于要查找的元素,则在数组中小于中间元素的一半区间中继续查找;如果中间元素小于要查找的元素,则在数组中大于中间元素的一半区间中继续查找;原创 2023-03-21 21:07:15 · 290 阅读 · 0 评论 -
js动态规划算法入门级教程,斐波那契数列的解法
斐波那契数列(Fibonacci sequence),又称黄金分割数列。斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*);这个数列从第三项开始,每一项都等于前两项之和。原创 2023-03-19 13:31:09 · 725 阅读 · 0 评论 -
创建一个更好的散列函数,解决散列表冲突
散列函数一个表现良好的散列函数是由几个方面构成的:插入和检索元素的时间(即性能),当然也包括较低的冲突可能性。创建一个更好的散列函数(社区推荐之一):// key 为 String// return 一个 hashCodefunction djb2HashCode (key){ const hash = 5381; for(var i = 0; i < key.length; i++){ hash = hash * 33 + key.charCodeAt(i); } return原创 2020-12-09 17:10:00 · 291 阅读 · 0 评论 -
四、链表、双向链表、循环链表
链表链表存储有序的元素集合,不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。如下图:要想访问链表中间的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。创建链表类:...原创 2020-05-21 17:23:19 · 290 阅读 · 0 评论 -
三、队列:优先队列+循环队列(击鼓传花算法)
队列队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。在现实中,最常见的队列的例子就是排队。我们需要创建自己的类来表示一个队列:function Queue() { /* * enqueue(element):向队列尾部添加一个(或多个)新的项。 ...原创 2020-05-01 18:31:59 · 777 阅读 · 0 评论 -
二、栈+进制转换
栈是一种遵循后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。现实生活中有很多栈的例子,如一摞书或者餐厅里堆放的盘子。接下来将创建一个类来表示栈,先声明类:function Stack() { /* * 我们可以使用数组来保存栈里的元素,然后声明一些操作栈的方法: * push(el...原创 2020-04-30 10:28:51 · 494 阅读 · 0 评论