![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
小的时候可菜了
这个作者很懒,什么都没留下…
展开
-
JS Date 使用以及工具函数
使用 new Date(), 返回的时间与本地的时间相差 8 个小时 (在中国) console.log(new Date()) getTimezoneOffset() 返回 UTC 时间与当前时区的时间差值 (UTC Time - cur Time) new Date().getTimezoneOffset() 使用 Date 构造函数来解析日期字符串, 会被解析为 UTC 而不是本地时间, 于是乎, -getTimezoneOffset()(cur Time - UTC Time) 可以补回来 co原创 2022-03-31 00:20:03 · 510 阅读 · 0 评论 -
JavaScript 二分查找的一些注意细节
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] const target = 3 const binarySearch = (arr, target) => { let l = 0, r = arr.length - 1 while (l <= r) { // 为何要 = ? 如 [1] 中找 1, 无等号都进不去 // mid 表示当前查找的索引 const mid = (l + r) >>> 1 // 位运算,原创 2022-03-25 19:38:27 · 697 阅读 · 0 评论 -
KMP 算法
来自:程序员代码面试指南:IT名企算法与数据结构题目最优解(第2版)左程云 P542 28. 实现 strStr() 如果字符串str中含有子串match,则返回match在str中的开始位置,不含有则返回-1 KMP算法是如何快速解决字符串匹配问题的? 生成match字符串的nextArr数组 nextArr[i]的含义 在match[i]之前的字符串match[0..i-1]中 以match[i-1]结尾的后缀子串(不能包含match[0])与必须 以match[0]开头的前缀子串(不能包含matc原创 2021-09-23 19:57:07 · 130 阅读 · 1 评论 -
动态规划题型
动态规划解题套路框架 动态规划问题的一般形式就是求最值 如何求最值呢? 首先,则将所有可行的答案穷举出来,然后再其中找最值 以后遇到求最值问题,首先思考如何穷举所有可能的结果 动态规划三要素 三要素:重叠子问题、最优子结构、状态转移方程 1️⃣穷举时可能存在“重叠子问题”,暴力穷举可能导致效率低下,所以需要“备忘录”或“DP table”来优化穷举过程,避免重复计算 2️⃣其次,动态规划问题具备“最优子结构”,这样才能通过子问题的最值得到原问题的最值 3️⃣列出正确的“状态转移方程”,才能正确的穷举 如原创 2021-08-12 17:53:38 · 148 阅读 · 0 评论 -
位运算的使用
什么是位运算 程序中的所有数在计算机内存中都是以二进制的形式储存的 位运算:直接对整数在内存中的二进制位进行操作 由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快 实战常用的位运算操作 if (x & 1) { console.log("x 为奇数"); } // 清除最低为的 1 a100 & a011 = a000 let x = 112 // 111 0000 x = x & (x - 1) // 111 0000 & 110 1原创 2021-09-17 22:22:48 · 75 阅读 · 0 评论 -
N 皇后问题 DFS + 位运算优化
52. N皇后 II x 轴 在右边、 y 轴在下边 左边: y = x + c 即 x - y = -c 右边: y = -x + c 即 x + y = c var totalNQueens = function(n) { let res = 0 const cols = new Set() const pie = new Set() // x + y const na = new Set() // x - y const dfs = (n, row) => {原创 2021-09-17 22:02:26 · 186 阅读 · 0 评论 -
深度优先DFS + 广度优先BFS
广度:从起点开始,先扫一层,再扫一层,层层递进,地毯式搜索 (一开始什么都学,越来越精) 深度:一直到底,再回来 (先把一个东西学的透彻) 模板 BFS – 非递归写法 符合人类的思维习惯,需要维护一个 queue var BFS = function(root) { const q = [root] const visited = [root] const res = [] while (q.length) { const currentLevel = [] const原创 2021-09-13 16:21:51 · 156 阅读 · 0 评论 -
优先队列题目
PriorityQueue - 优先队列:正常⼊、按照优先级出 实现机制 Heap (Binary, Binomial, Fibonacci) Binary Search Tree 最小堆实现 class MinHeap { constructor(data = []) { this.data = data // heapify if(this.size() > 1) { for (let i = 0; i <原创 2021-08-30 22:07:30 · 112 阅读 · 0 评论 -
数组、链表、栈、队列
数组 一种线性表数据结构,用一组连续的内存空间,存储一组具有相同类型的数据 正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:⭐️ “随机访问”。 但有利就有弊,这两个限制也让数组的很多操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。 数组支持随机访问,根据下标随机访问的时间复杂度为O(1) 为什么大多数编程语言中,数组要从0开始编号,而不是从1开始呢? 从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。如果用a[k]来表示原创 2021-08-29 16:12:43 · 96 阅读 · 0 评论