Data Structure and Algorithms
文章平均质量分 64
Data Structure and Algorithms
Wang's Blog
Keep learning for the innovation era.
展开
-
数据结构与算法之递归: LeetCode 93. 复原 IP 地址 (Typescript版)
【代码】数据结构与算法之递归: LeetCode 93. 复原 IP 地址 (Typescript版)原创 2023-12-16 20:19:49 · 134 阅读 · 0 评论 -
数据结构与算法之递归: LeetCode 78. 子集 (Typescript版)
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。原创 2023-11-29 22:56:03 · 182 阅读 · 0 评论 -
数据结构与算法之递归: LeetCode 46. 全排列 (Typescript版)
1 )回溯1: 基于数组。2 )回溯2: 基于交换。原创 2023-11-29 19:30:00 · 190 阅读 · 0 评论 -
数据结构与算法之贪心: LeetCode 860. 柠檬水找零 (Typescript版)
给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。注意,一开始你手头没有任何零钱。原创 2023-11-28 19:39:53 · 84 阅读 · 0 评论 -
数据结构与算法之贪心: LeetCode 455. 分饼干 (Typescript版)
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。2 )排序 + 双指针 + 贪心。1 )排序 + 遍历。原创 2023-11-28 18:48:02 · 188 阅读 · 0 评论 -
数据结构与算法之贪心: LeetCode 122. 买卖股票的最佳时机II (Typescript版)
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。1 )贪心策略1: 从低点买入,到价格高点卖出,不断买卖 (在保证单次利益的基础上,实现多次交易) 2 )贪心策略2: 从低点买入, 只要赚钱就卖出,不断买卖 (追求多次利益, 单次利益可能不高)给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。返回 你能获得的 最大 利润。原创 2023-11-26 21:27:02 · 100 阅读 · 0 评论 -
数据结构与算法之二叉树: LeetCode 226. 翻转二叉树 (Typescript版)
1 )深度优先递归版本。2 )广度优先迭代实现。原创 2023-11-26 11:48:51 · 226 阅读 · 1 评论 -
数据结构与算法之二叉树: LeetCode 101. 对称二叉树 (Typescript版)
1 )深度优先递归版本。2 )广度优先迭代版本。原创 2023-11-26 08:30:21 · 197 阅读 · 0 评论 -
数据结构与算法之二叉树: LeetCode 100. 相同的树 (Typescript版)
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。1 )深度优先递归版本。2 )广度优先迭代版本。原创 2023-11-25 23:53:48 · 256 阅读 · 0 评论 -
数据结构与算法之排序: LeetCode 41. 缺失的第一个正数 (Typescript版)
1 )一般思路 2 )基于选择排序改造 3 )基于Map 4 )负号标记法改造数组 5 )置换法原创 2023-11-15 21:33:42 · 165 阅读 · 0 评论 -
数据结构与算法之排序: LeetCode 922. 按奇偶排序数组 II (Typescript版)
1 )原生sort + 一般方法。2 )两次遍历 + & 运算判断奇偶对位存放。3 )双指针,奇偶交换。原创 2023-11-14 12:32:08 · 206 阅读 · 0 评论 -
数据结构与算法之排序: LeetCode 164. 最大间距 (Typescript版)
1 )借用原生sort + 迭代取相邻最大值。2 )基数排序来解 3 )计数排序来解 4 )桶排序原创 2023-11-13 20:15:00 · 213 阅读 · 0 评论 -
数据结构与算法之查找: LeetCode 374. 猜数字大小 (Typescript版)
1 )迭代 + 二分实现。2 )递归 + 二分实现。原创 2023-11-12 13:27:11 · 182 阅读 · 0 评论 -
数据结构与算法之排序: LeetCode 21. 合并两个有序链表 (Typescript版)
1 )遍历两个链表,依次比较存入结果链表。2 )递归原创 2023-11-12 10:58:08 · 166 阅读 · 0 评论 -
数据结构与算法之查找: LeetCode 704. 二分查找 (Typescript版)
时间复杂度 O(logn)每次比较,搜索范围缩半劈成2半的问题都是O(logn)原创 2023-11-04 19:10:23 · 293 阅读 · 0 评论 -
数据结构与算法之查找: 顺序查找 (Typescript版)
非常低效,算是入门搜索时间复杂度:O(n)对于数组结构或链表结构而言,没什么太多可说的。原创 2023-11-04 12:58:05 · 173 阅读 · 0 评论 -
数据结构与算法之排序: 桶排序 (Typescript版)
桶排序的时间复杂度 在 O(n) ~ O(n2n^2n2普通桶排序并不普遍应用是拆分为桶后,在每个桶内还需要排序,意义就不大了而且要考虑每个桶内用什么样的数据结构来存储(考虑到内部排序)如果还用数组就极大浪费了空间(需使用最大的空间, 不同语言有区别)一般可以使用链表,但是对链表排序又开始麻烦了桶排序优化空间,时间上就会增加;优化时间空间上又会增多, 取一个时间和空间的平衡。原创 2023-11-03 16:10:47 · 211 阅读 · 0 评论 -
数据结构与算法之排序: 基数排序 (Typescript版)
基数排序时间复杂度 O(kn) ≈ O(n) k是常数最外层的 max/base 是常数级别, 内部的多个for循环也是常数,即: 常数 k基数排序也可理解为按关键字(这里的关键字就是基数radix)排序非比较排序,基于下标的顺序来回赋值, 使用计数排序的思想做累加数组基数排序基于计数排序,是桶排序的一种, 又称多关键字排序最好从个位(低位)先开始排起,这是一种比较简单的处理方式高位优先需要用到递归,就复杂一些是一种思想简单,实现起来有些复杂的算法。原创 2023-11-02 21:56:55 · 160 阅读 · 0 评论 -
数据结构与算法之排序: 计数排序 (Typescript版)
计数排序的适用范围有限:最优版时间复杂度可降低到 O(n), 是最快的排序算法, 但是有两个前提需要满足1)需要排序的元素必须是非负整数(下标不能是负数和小数 2)排序元素的取值要在一定范围内,并且比较集中满足以上两个条件,才能最大发挥出计数排序的优势, 否则不适用计数排序的缺点基础版空间浪费,优化版解决了这个问题将数组长度定为 max-min+1, 即不仅要找出最大值,还要找出最小值缺点弥补:根据两者的差来确定计数数组的长度则可弥补之计数排序是非常稳定的排序算法,但是适用场景确实有限。原创 2023-11-02 00:16:37 · 187 阅读 · 0 评论 -
数据结构与算法之排序: 希尔排序 (Typescript版)
希尔排序是插入排序的一种,是针对直接插入排序算法的改进原创 2023-10-31 22:09:48 · 376 阅读 · 0 评论 -
数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Typescript版)
LRU - Lease Recently Used 最近使用如果内存优先,只缓存最近使用的,删除 ‘沉睡’ 数据核心 api: get set分析。原创 2023-10-28 22:04:31 · 1190 阅读 · 0 评论 -
数据结构与算法之排序: 堆排序 (Typescript版)
数据结构与算法之排序: 堆排序 (Typescript版)原创 2023-10-27 22:58:55 · 248 阅读 · 0 评论 -
数据结构与算法之排序: 选择排序 (Typescript版)
【代码】数据结构与算法之排序: 选择排序 (Typescript版)原创 2023-10-27 22:56:06 · 228 阅读 · 0 评论 -
数据结构与算法之排序: 归并排序 (Typescript版)
【代码】数据结构与算法之排序: 归并排序 (Typescript版)原创 2023-10-27 20:04:57 · 250 阅读 · 0 评论 -
数据结构与算法之排序: 插入排序 (Typescript版)
【代码】数据结构与算法之排序: 插入排序 (Javascript版)原创 2023-10-27 18:34:59 · 133 阅读 · 0 评论 -
数据结构与算法之排序: 快速排序 (Typescript版)
1 ) 简单版本,消耗内存 2 )基于指针版本, 优化内存原创 2023-10-27 12:39:32 · 268 阅读 · 0 评论 -
数据结构与算法之排序: 冒泡排序 (Typescript版)
1 )version 1 初始版本。2 ) version 2 ES6 做两数交换 优化版。3 ) version 3 冒泡排序,提前终止版。4 )version 4 冒泡排序,跳跃版。5 )version 5 冒泡排序,提前终止+跳跃版。原创 2023-10-26 22:31:49 · 298 阅读 · 0 评论 -
数据结构与算法之排序: 侏儒排序 (Typescript版)
1 )普通版 2 )优化版原创 2023-10-26 12:51:31 · 167 阅读 · 0 评论 -
数据结构与算法之矩阵: LeetCode 48. 旋转矩阵 (Typescript版)
【代码】数据结构与算法之矩阵: Leetcode 48. 旋转矩阵 (Typescript版)原创 2023-10-25 12:41:41 · 574 阅读 · 0 评论 -
数据结构与算法之矩阵: LeetCode 134. 螺旋矩阵 (Typescript版)
1 )减而治之递归实现。原创 2023-10-25 09:02:29 · 540 阅读 · 0 评论 -
数据结构与算法之图: LeetCode 133. 克隆图 (Typescript版)
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。时间复杂度:O(n)空间复杂度:O(n)原创 2023-10-23 11:54:14 · 134 阅读 · 0 评论 -
数据结构与算法之图: LeetCode 417. 太平洋大西洋水流问题 (Typescript版)
给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度。返回网格坐标 result 的 2D 列表 ,其中 result[i] = [ri, ci] 表示雨水从单元格 (ri, ci) 流动 既可流向太平洋也可流向大西洋。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。“太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。原创 2023-10-23 09:31:01 · 128 阅读 · 0 评论 -
数据结构与算法之图: LeetCode 65. 有效数字 (Typescript版)
部分有效数字列举如下:[“2”, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789”]部分无效数字列举如下:[“abc”, “1a”, “1e”, “e3”, “99e2.5”, “–6”, “-+3”, “95a54e53”]给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true。3 )邻接表(图)标识的状态机。原创 2023-10-19 12:32:41 · 175 阅读 · 0 评论 -
数据结构与算法之图: 图及其深度和广度优先遍历实现 (Typescript版)
【代码】数据结构与算法之图: 图及其深度和广度优先遍历实现 (Typescript版)原创 2023-10-07 18:52:27 · 188 阅读 · 0 评论 -
数据结构与算法之堆: LeetCode 313. 超级丑数 (Typescript版)
1 )将问题分而治之 2 )使用堆结构来提升查找性能,优化版 3 )动态规划原创 2023-10-06 23:39:13 · 280 阅读 · 0 评论 -
数据结构与算法之堆: LeetCode 451. 根据字符出现频率排序 (Typescript版)
1 )普通方法实现, 基于原生sort和Map结构。2 )使用堆排序原创 2023-10-04 23:37:26 · 339 阅读 · 0 评论 -
数据结构与算法之堆: 实现最大堆类的两种方式及实现堆排序 (Typescript版)
1 )方案一:参考最小堆类实现最大堆类及实现排序。2 )方案二:另一种方式实现最大堆类及实现排序。原创 2023-10-03 22:35:54 · 137 阅读 · 0 评论 -
数据结构与算法之堆: LeetCode 23. 合并K个升序链表 (Typescript版)
【代码】数据结构与算法之堆: Leetcode 23. 合并 K 个升序链表 (Typescript版)原创 2023-10-02 20:15:25 · 173 阅读 · 0 评论 -
数据结构与算法之堆: LeetCode 347. 前K个高频元素 (Typescript版)
【代码】数据结构与算法之堆: Leetcode 347. 前K个高频元素 (Typescript版)原创 2023-10-02 14:59:09 · 183 阅读 · 0 评论 -
数据结构与算法之堆: LeetCode 215. 数组中的第K个最大元素 (Typescript版)
1 )基于js中原生sort api。2 )基于堆的数据结构和堆排序的方法。3 )基于冒泡排序。 4 ) 基于快速排序。原创 2023-10-01 23:26:49 · 251 阅读 · 0 评论