数据结构和算法
数据结构和算法
道甚夷
今日的礼物
展开
-
算法:Fisher-Yates算法(也被称为Knuth洗牌算法)
Fisher-Yates算法(也被称为Knuth洗牌算法)原创 2024-09-26 11:21:00 · 160 阅读 · 0 评论 -
leetcode 70.爬楼梯
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?时间复杂度O(n)原创 2024-06-13 15:14:39 · 434 阅读 · 1 评论 -
js-算法-回文
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串。给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回 false。字母和数字都属于字母数字字符。原创 2022-09-13 09:45:16 · 178 阅读 · 0 评论 -
js-算法-实现convert方法
/ 实现 convert 方法,把原始 list 转换成树形结构,要求尽可能降低时间复杂度。// // 原始 list 如下。原创 2022-09-09 10:20:00 · 776 阅读 · 0 评论 -
js-算法题-双指针-获取字符串中字符串连续最多的字符以及次数
如 输入 ‘abbcccddeeee1234’获取字符串中字符串连续最多的字符以及次数。最多的字符是 e ,4次。原创 2022-09-09 09:24:03 · 164 阅读 · 0 评论 -
js-算法题-移动0
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。// 输入: [0,1,0,3,12]// 输出: [1,3,12,0,0]原创 2022-09-08 17:27:39 · 232 阅读 · 0 评论 -
js-currying-add函数求和功能
请实现一个 add 函数,满足以下功能。原创 2022-09-08 16:21:00 · 296 阅读 · 0 评论 -
js-算法题-两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]原创 2022-09-08 14:43:09 · 153 阅读 · 0 评论 -
js-bilibili算法题-递归-倒序字符串
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。原创 2022-09-07 14:13:35 · 264 阅读 · 0 评论 -
js-js数据结构和算法-递归思想-斐波那契数-动态规划-贪心
递归为何用递归呢?更快吗?递归并不比普通版本更快,反倒更慢。但要知道,递归更容易理解,并且它所需的代码量更少。通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。(ECMAScript 6中,因为尾调用优化的缘故,递归并不会更慢。但是原创 2021-12-13 10:57:29 · 982 阅读 · 0 评论 -
js-js数据结构和算法-树
树树是一种分层数据的抽象模型一个树结构包含一系列存在父子关系的节点。每个节点都有一个父节点(除了顶部的第一个节点)以及零个或多个子节点:根节点:位于树顶部的节点叫作根节点。它没有父节点。树中的每个元素都叫作节点,节点分为内部节点和外部节点。一个节点可以有祖先和后代。内部节点:至少有一个子节点的节点称为内部节点。外部节点或叶节点:没有子元素的节点称为外部节点或叶节点子树:由节点和它的后代构成深度:节点的深度取决于它的祖先节点的数量高度: 树的高度取决于所有节点深度的最大值二叉树: 二叉树中原创 2021-12-13 10:47:16 · 1274 阅读 · 0 评论 -
js-数据结构和算法-图-广度优先搜索和深度优先搜索-最短距离-拓扑排序
function Dictionary() { let items = {} this.set = function (key, value) { items[key] = value } this.remove = function (key) { if (this.has(key)) { delete items[key] return true原创 2021-12-08 18:35:52 · 1095 阅读 · 0 评论 -
js-数据结构和算法-搜索算法(2种)
搜索算法顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索顺序搜索是最低效的一种搜索算法。线性搜索二分搜索算法的原理和猜数字游戏类似,就是那个有人说“我正想着一个1到100的数字”的游戏。我们每回应一个数字,那个人就会说这个数字是高了、低了还是对了。这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。(1) 选择数组的中间值。(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。(3) 如果待搜索值比选中值要小,则返回步原创 2021-12-03 16:51:54 · 148 阅读 · 0 评论 -
js-数据结构和算法-排序算法(5种)
冒泡排序冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。选择排序选择排序算法是一种原址比较排序算法。选择排序大致的思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推插入排序插入排序每次排一个数组项,以此方式构建最后的排序数组。假定第一项已经排序了,接着,它和第二项进行比较,第二项是应该待在原位还是插到第一项之前呢?这样,头两项就已正确排序,接着和第三项比较(它是该原创 2021-12-03 16:50:46 · 127 阅读 · 0 评论 -
js-数据结构和算法-字典与散列表
字典存储[键,值]对然后,我们需要声明一些映射/字典所能使用的方法。set(key,value):向字典中添加新元素。remove(key):通过使用键值来从字典中移除键值对应的数据值。has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。get(key):通过键值查找特定的数值并返回。clear():将这个字典中的所有元素全部删除。size():返回字典所包含元素的数量。与数组的length属性类似。keys():将字典所包含的所有键名以数组形式返回。原创 2021-12-01 18:36:10 · 720 阅读 · 0 评论 -
js-数据结构和算法-集合
集合集合是由一组无序且唯一(即不能重复)的项组成的集合是一个既没有重复元素,也没有顺序概念的数组。声明一些集合可用的方法(我们会尝试模拟与ECMAScript 6实现相同的Set类)。add(value):向集合添加一个新的项。remove(value):从集合移除一个值。has(value):如果值在集合中,返回true,否则返回false。clear():移除集合中的所有项。size():返回集合所包含元素的数量。与数组的length属性类似。values():返回一个包含集合中所有原创 2021-12-01 16:45:45 · 436 阅读 · 0 评论 -
js-数据结构和算法-链表
链表链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。相对于传统的数组,链表的一个好处在于,添加或移除元素的时候不需要移动其他元素。然而,链表需要使用指针,因此实现链表时需要额外注意。数组的另一个细节是可以直接访问任何位置的任何元素,而要想访问链表中间的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。(可以使用二分查找优化遍历)LinkedList数据结构还需要一个Node辅助类。原创 2021-12-01 15:58:07 · 185 阅读 · 0 评论 -
js-数据结构和算法-队列
队列队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。思路:首先需要一个用于存储队列中元素的数据结构。我们可以使用数组:var items = [];接下来需要声明一些队列可用的方法。enqueue(element(s)):向队列尾部添加一个(或多个)新的项。dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。front():返回队原创 2021-12-01 10:52:43 · 2384 阅读 · 0 评论 -
js-数据结构和算法-栈
定义栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。思路:首先,我们需要一种数据结构来保存栈里的元素。可以选择数组:var items = [];接下来,要为我们的栈声明一些方法。push(element(s)):添加一个(或几个)新元素到栈顶。pop():移除栈顶的元素,同时返回被移除的元素。peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它原创 2021-12-01 10:03:44 · 188 阅读 · 0 评论