JavaScript刷LeetCode模板技巧篇(一)
虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码。
常用函数
包括打印函数和一些数学函数。
const _max = Math.max.bind(Math);
const _min = Math.min.bind(Math);
const _pow = Math.pow.bind(Math);
const _floor = Math.floor.bind(Math);
const _round = Math.round.bind(Math);
const _ceil = Math.ceil.bind(Math);
const log = console.log.bind(console);
//const log = _ => {}
log
在提交的代码中当然是用不到的,不过在调试时十分有用。但是当代码里面加了很多 log
的时候,提交时还需要一个个注释掉就相当麻烦了,只要将log
赋值为空函数就可以了。
举一个简单的例子,下面的代码是可以直接提交的。
// 计算 1+2+...+n
// const log = console.log.bind(console);
const log = _ => {}function sumOneToN(n) {let sum = 0;for (let i = 1; i <= n; i++) {sum += i;log(`i=${i}: sum=${sum}`);}return sum;
}sumOneToN(10);
位运算的一些小技巧
判断一个整数 x
的奇偶性:x & 1 = 1 (奇数) , x & 1 = 0 (偶数)
求一个浮点数 x
的整数部分:~~x
,对于正数相当于 floor(x)
对于负数相当于 ceil(-x)
计算 2 ^ n
:1 << n
相当于 pow(2, n)
计算一个数 x
除以 2 的 n 倍:x >> n
相当于 ~~(x / pow(2, n))
判断一个数 x
是 2 的整数幂(即 x = 2 ^ n): x & (x - 1) = 0
※注意※:上面的位运算只对32位带符号的整数有效,如果使用的话,一定要注意数!据!范!围!
记住这些技巧的作用:
提升运行速度 ❌
提升逼格 ✅
举一个实用的例子,快速幂(原理自行google)
// 计算x^n n为整数
function qPow(x, n) {let result = 1;while (n) {if (n & 1) result *= x; // 同 if(n%2)x = x * x;n >>= 1; // 同 n=floor(n/2)}return result;
}
链表
刚开始做 LeetCode 的题就遇到了很多链表的题。恶心心。最麻烦的不是写题,是调试啊!!于是总结了一些链表的辅助函数。
/** * 链表节点 * @param {*} val* @param {ListNode} next*/
function ListNode(val, next = null) {this.val = val;this.next = next;
}
/** * 将一个数组转为链表 * @param {array} a* @return {ListNode} */
const getListFromArray = (a) => {let dummy = new ListNode()let pre = dummy;a.forEach(x => pre = pre.next = new ListNode(x));return dummy.next;
}
/** * 将一个链表转为数组 * @param {ListNode} node* @return {array} */
const getArrayFromList = (node) => {let a = [];while (node) {a.push(node.val);node = node.next;}return a;
}
/** * 打印一个链表 * @param {ListNode} node */
const logList = (node) => {let str = 'list: ';while (node) {str += node.val + '->';node = node.next;}str += 'end';log(str);
}
还有一个常用小技巧,每次写链表的操作,都要注意判断表头,如果创建一个空表头来进行操作会方便很多。
let dummy = new ListNode();
// 返回
return dummy.next;
使用起来超爽哒~举个例子。@leetcode 82。题意就是删除链表中连续相同值的节点。
/** * @param {ListNode} head* @return {ListNode} */
var deleteDuplicates = function(head) {// 空指针或者只有一个节点不需要处理if (head === null || head.next === null) return head;let dummy = new ListNode();let oldLinkCurrent = head;let newLinkCurrent = dummy;while (oldLinkCurrent) {let next = oldLinkCurrent.next;// 如果当前节点和下一个节点的值相同 就要一直向前直到出现不同的值if (next && oldLinkCurrent.val === next.val) {while (next && oldLinkCurrent.val === next.val) {next = next.next;}oldLinkCurrent = next;} else {newLinkCurrent = newLinkCurrent.next = oldLinkCurrent;oldLinkCurrent = oldLinkCurrent.next;}}newLinkCurrent.next = null; // 记得结尾置空~logList(dummy.next);return dummy.next;
};deleteDuplicates(getListFromArray([1,2,3,3,4,4,5]));
deleteDuplicates(getListFromArray([1,1,2,2,3,3,4,4,5]));
deleteDuplicates(getListFromArray([1,1]));
deleteDuplicates(getListFromArray([1,2,2,3,3]));
参考视频:传送门
本地运行结果
list: 1->2->5->end
list: 5->end
list: end
list: 1->end
是不是很方便!
矩阵(二维数组)
矩阵的题目也有很多,基本每一个需要用到二维数组的题,都涉及到初始化,求行数列数,遍历的代码。于是简单提取出来几个函数。
/*** 初始化一个二维数组* @param {number} r 行数* @param {number} c 列数* @param {*} init 初始值*/
const initMatrix = (r, c, init = 0) => new Array(r).fill().map(_ => new Array(c).fill(init));
/*** 获取一个二维数组的行数和列数* @param {any[][]} matrix* @return [row, col]*/
const getMatrixRowAndCol = (matrix) => matrix.length === 0 ? [0, 0] : [matrix.length, matrix[0].length];
/*** 遍历一个二维数组* @param {any[][]} matrix * @param {Function} func */
const matrixFor = (matrix, func) => {matrix.forEach((row, i) => {row.forEach((item, j) => {func(item, i, j, row, matrix);});})
}
/*** 获取矩阵第index个元素 从0开始* @param {any[][]} matrix * @param {number} index */
function getMatrix(matrix, index) {let col = matrix[0].length;let i = ~~(index / col);let j = index - i * col;return matrix[i][j];
}
/*** 设置矩阵第index个元素 从0开始* @param {any[][]} matrix * @param {number} index */
function setMatrix(matrix, index, value) {let col = matrix[0].length;let i = ~~(index / col);let j = index - i * col;return matrix[i][j] = value;
}
找一个简单的矩阵的题示范一下用法。@leetcode 566。题意就是将一个矩阵重新排列为r行c列。
/** * @param {number[][]} nums* @param {number} r* @param {number} c* @return {number[][]} */
var matrixReshape = function(nums, r, c) {// 将一个矩阵重新排列为r行c列// 首先获取原来的行数和列数let [r1, c1] = getMatrixRowAndCol(nums);log(r1, c1);// 不合法的话就返回原矩阵if (!r1 || r1 * c1 !== r * c) return nums;// 初始化新矩阵let matrix = initMatrix(r, c);// 遍历原矩阵生成新矩阵matrixFor(nums, (val, i, j) => {let index = i * c1 + j; // 计算是第几个元素log(index);setMatrix(matrix, index, val); // 在新矩阵的对应位置赋值});return matrix;
};let x = matrixReshape([[1],[2],[3],[4]], 2, 2);
log(x)
二叉树
当我做到二叉树相关的题目,我发现,我错怪链表了,呜呜呜这个更恶心。
当然对于二叉树,只要你掌握先序遍历,后序遍历,中序遍历,层序遍历,递归以及非递归版,先序中序求二叉树,先序后序求二叉树,基本就能AC大部分二叉树的题目了(我瞎说的)。
二叉树的题目 input 一般都是层序遍历的数组,所以写了层序遍历数组和二叉树的转换,方便调试。
function TreeNode(val, left = null, right = null) {this.val = val;this.left = left;this.right = right;
}
/*** 通过一个层次遍历的数组生成一棵二叉树* @param {any[]} array* @return {TreeNode}*/
function getTreeFromLayerOrderArray(array) {let n = array.length;if (!n) return null;let index = 0;let root = new TreeNode(array[index++]);let queue = [root];while(index < n) {let top = queue.shift();let v = array[index++];top.left = v == null ? null : new TreeNode(v);if (index < n) {let v = array[index++];top.right = v == null ? null : new TreeNode(v);}if (top.left) queue.push(top.left);if (top.right) queue.push(top.right);}return root;
}
/*** 层序遍历一棵二叉树 生成一个数组* @param {TreeNode} root * @return {any[]}*/
function getLayerOrderArrayFromTree(root) {let res = [];let que = [root];while (que.length) {let len = que.length;for (let i = 0; i < len; i++) {let cur = que.shift();if (cur) {res.push(cur.val);que.push(cur.left, cur.right);} else {res.push(null);}}}while (res.length > 1 && res[res.length - 1] == null) res.pop(); // 删掉结尾的 nullreturn res;
}
一个例子,@leetcode 110,判断一棵二叉树是不是平衡二叉树。
/** * @param {TreeNode} root * @return {boolean} */
var isBalanced = function(root) {if (!root) return true; // 认为空指针也是平衡树吧// 获取一个二叉树的深度const d = (root) => {if (!root) return 0;return _max(d(root.left), d(root.right)) + 1;}let leftDepth = d(root.left);let rightDepth = d(root.right);// 深度差不超过 1 且子树都是平衡树if (_min(leftDepth, rightDepth) + 1 >= _max(leftDepth, rightDepth)&& isBalanced(root.left) && isBalanced(root.right)) return true;return false;
};log(isBalanced(getTreeFromLayerOrderArray([3,9,20,null,null,15,7])));
log(isBalanced(getTreeFromLayerOrderArray([1,2,2,3,3,null,null,4,4])));
二分查找
参考 C++ STL 中的 lower_bound
和 upper_bound
。这两个函数真的很好用的!
/** * 寻找>=target的最小下标 * @param {number[]} nums* @param {number} target* @return {number} */
function lower_bound(nums, target) {let first = 0;let len = nums.length;while (len > 0) {let half = len >> 1;let middle = first + half;if (nums[middle] < target) {first = middle + 1;len = len - half - 1;} else {len = half;}}return first;
}/** * 寻找>target的最小下标 * @param {number[]} nums* @param {number} target* @return {number} */
function upper_bound(nums, target) {let first = 0;let len = nums.length;while (len > 0) {let half = len >> 1;let middle = first + half;if (nums[middle] > target) {len = half;} else {first = middle + 1;len = len - half - 1;}}return first;
}
照例,举个例子,@leetcode 34。题意是给一个排好序的数组和一个目标数字,求数组中等于目标数字的元素最小下标和最大下标。不存在就返回 -1。
/** * @param {number[]} nums* @param {number} target* @return {number[]} */
var searchRange = function(nums, target) {let lower = lower_bound(nums, target);let upper = upper_bound(nums, target);let size = nums.length;// 不存在返回 [-1, -1]if (lower >= size || nums[lower] !== target) return [-1, -1];return [lower, upper - 1];
};
在 VS Code 中刷 LeetCode
前面说的那些模板,难道每一次打开新的一道题都要复制一遍么?当然不用啦。
首先配置代码片段 选择 Code -> Preferences -> User Snippets ,然后选择 JavaScript
然后把文件替换为下面的代码:
{"leetcode template": {"prefix": "@lc","body": ["const _max = Math.max.bind(Math);","const _min = Math.min.bind(Math);","const _pow = Math.pow.bind(Math);","const _floor = Math.floor.bind(Math);","const _round = Math.round.bind(Math);","const _ceil = Math.ceil.bind(Math);","const log = console.log.bind(console);","// const log = _ => {}","/**************** 链表 ****************/","/**"," * 链表节点"," * @param {*} val"," * @param {ListNode} next"," */","function ListNode(val, next = null) {"," this.val = val;"," this.next = next;","}","/**"," * 将一个数组转为链表"," * @param {array} array"," * @return {ListNode}"," */","const getListFromArray = (array) => {"," let dummy = new ListNode()"," let pre = dummy;"," array.forEach(x => pre = pre.next = new ListNode(x));"," return dummy.next;","}","/**"," * 将一个链表转为数组"," * @param {ListNode} list"," * @return {array}"," */","const getArrayFromList = (list) => {"," let a = [];"," while (list) {"," a.push(list.val);"," list = list.next;"," }"," return a;","}","/**"," * 打印一个链表"," * @param {ListNode} list "," */","const logList = (list) => {"," let str = 'list: ';"," while (list) {"," str += list.val + '->';"," list = list.next;"," }"," str += 'end';"," log(str);","}","/**************** 矩阵(二维数组) ****************/","/**"," * 初始化一个二维数组"," * @param {number} r 行数"," * @param {number} c 列数"," * @param {*} init 初始值"," */","const initMatrix = (r, c, init = 0) => new Array(r).fill().map(_ => new Array(c).fill(init));","/**"," * 获取一个二维数组的行数和列数"," * @param {any[][]} matrix"," * @return [row, col]"," */","const getMatrixRowAndCol = (matrix) => matrix.length === 0 ? [0, 0] : [matrix.length, matrix[0].length];","/**"," * 遍历一个二维数组"," * @param {any[][]} matrix "," * @param {Function} func "," */","const matrixFor = (matrix, func) => {"," matrix.forEach((row, i) => {"," row.forEach((item, j) => {"," func(item, i, j, row, matrix);"," });"," })","}","/**"," * 获取矩阵第index个元素 从0开始"," * @param {any[][]} matrix "," * @param {number} index "," */","function getMatrix(matrix, index) {"," let col = matrix[0].length;"," let i = ~~(index / col);"," let j = index - i * col;"," return matrix[i][j];","}","/**"," * 设置矩阵第index个元素 从0开始"," * @param {any[][]} matrix "," * @param {number} index "," */","function setMatrix(matrix, index, value) {"," let col = matrix[0].length;"," let i = ~~(index / col);"," let j = index - i * col;"," return matrix[i][j] = value;","}","/**************** 二叉树 ****************/","/**"," * 二叉树节点"," * @param {*} val"," * @param {TreeNode} left"," * @param {TreeNode} right"," */","function TreeNode(val, left = null, right = null) {"," this.val = val;"," this.left = left;"," this.right = right;","}","/**"," * 通过一个层次遍历的数组生成一棵二叉树"," * @param {any[]} array"," * @return {TreeNode}"," */","function getTreeFromLayerOrderArray(array) {"," let n = array.length;"," if (!n) return null;"," let index = 0;"," let root = new TreeNode(array[index++]);"," let queue = [root];"," while(index < n) {"," let top = queue.shift();"," let v = array[index++];"," top.left = v == null ? null : new TreeNode(v);"," if (index < n) {"," let v = array[index++];"," top.right = v == null ? null : new TreeNode(v);"," }"," if (top.left) queue.push(top.left);"," if (top.right) queue.push(top.right);"," }"," return root;","}","/**"," * 层序遍历一棵二叉树 生成一个数组"," * @param {TreeNode} root "," * @return {any[]}"," */","function getLayerOrderArrayFromTree(root) {"," let res = [];"," let que = [root];"," while (que.length) {"," let len = que.length;"," for (let i = 0; i < len; i++) {"," let cur = que.shift();"," if (cur) {"," res.push(cur.val);"," que.push(cur.left, cur.right);"," } else {"," res.push(null);"," }"," }"," }"," while (res.length > 1 && res[res.length - 1] == null) res.pop(); // 删掉结尾的 null"," return res;","}","/**************** 二分查找 ****************/","/**"," * 寻找>=target的最小下标"," * @param {number[]} nums"," * @param {number} target"," * @return {number}"," */","function lower_bound(nums, target) {"," let first = 0;"," let len = nums.length;",""," while (len > 0) {"," let half = len >> 1;"," let middle = first + half;"," if (nums[middle] < target) {"," first = middle + 1;"," len = len - half - 1;"," } else {"," len = half;"," }"," }"," return first;","}","","/**"," * 寻找>target的最小下标"," * @param {number[]} nums"," * @param {number} target"," * @return {number}"," */","function upper_bound(nums, target) {"," let first = 0;"," let len = nums.length;",""," while (len > 0) {"," let half = len >> 1;"," let middle = first + half;"," if (nums[middle] > target) {"," len = half;"," } else {"," first = middle + 1;"," len = len - half - 1;"," }"," }"," return first;","}","$1"],"description": "LeetCode常用代码模板"}
}
以后每一次写题之前,键入 @lc
就会出现提示,轻松加入代码模板。
相关文章:
![](https://img-blog.csdnimg.cn/d32384a673274caab2d75d44effd1a9c.png)
JavaScript刷LeetCode模板技巧篇(一)
虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle hard ,总结了一些刷题常用的模板代码。 常用函数 包括打印函数和一些数学函数。 const _max Math.max.bind(Math); co…...
![](https://img-blog.csdnimg.cn/2e1f88689f164cf1af09c6bd3d7b0903.png#pic_center)
ros-sensor_msgs/PointCloud2消息内容解释
1.字段解释 header-----头文件,包含消息的序列号,时间戳(系统时间)和坐标系id,其中secs为秒,nsecs为去除秒数后剩余的纳秒数 height-----点云的高度,如果是无序点云,则为1,例子中的点云为有序点…...
![](https://img-blog.csdnimg.cn/9a2536e780df47ca8ca70d03b38c4a0f.png)
LeetCode 每日一题2347. 最好的扑克手牌
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
![](https://img-blog.csdnimg.cn/539e01824c6f43c7bb8587a0e5c92af4.png)
MMPBSA计算--基于李继存老师gmx_mmpbsa脚本
MMPBSA计算–基于李继存老师gmx_mmpbsa脚本 前期准备 软件安装 安装gromacs, 可以查阅 我的blogGromacs-2022 GPU-CUDA加速版 unbantu 安装 apbs, sudo apt install apbs 安装 gawk, sudo apt install gawk MD模拟好的文件 我们以研究蛋白小分子动态相互作用-III(蛋白配体…...
![](https://img-blog.csdnimg.cn/20210127135556980.png)
Kafka优化篇-压测和性能调优
简介 Kafka的配置详尽、复杂,想要进行全面的性能调优需要掌握大量信息,这里只记录一下我在日常工作使用中走过的坑和经验来对kafka集群进行优化常用的几点。 Kafka性能调优和参数调优 性能调优 JVM的优化 java相关系统自然离不开JVM的优化。首先想到…...
![](https://img-blog.csdnimg.cn/c0d258c92a42417997ca7378be6c528e.png)
MinIo-SDK
3.2.5 SDK 3.2.5.1上传文件 MinIO提供多个语言版本SDK的支持,下边找到java版本的文档: 地址:https://docs.min.io/docs/java-client-quickstart-guide.html 最低需求Java 1.8或更高版本: maven依赖如下: XML<dependency&g…...
![](https://www.ngui.cc/images/no-images.jpg)
系统分析师真题2018试卷相关概念一
面向对象的基本概念: 对象的三要素为:属性(数据)、方法(操作)、对象ID(标识)UML2.0包括14种图: 类图(class diagram):类图描述一组类、接口、协作和他们之间的关系。在OO系统的建模中,最常见的图就是类图。类图给出了系统的静态设计图,活动类的类图给出了系统的静…...
![](https://img-blog.csdnimg.cn/img_convert/aa9d4927de7885106265b20458b438de.png)
身为大学生,你不会还不知道有这些学生福利吧!!!!
本文介绍的是利用学生身份可以享受到的相关学生优惠权益,但也希望各位享受权利的同时不要忘记自己的义务,不要售卖、转手自己的学生优惠资格,使得其他同学无法受益。 前言 高考已经过去,我们也将迎来不同于以往的大学生活&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
试题 算法训练 藏匿的刺客
问题描述 强大的kAc建立了强大的帝国,但人民深受其学霸及23文化的压迫,于是勇敢的鹏决心反抗。 kAc帝国防守森严,鹏带领着小伙伴们躲在城外的草堆叶子中,称为叶子鹏。 kAc帝国的派出的n个看守员都发现了这一问题ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/d525fd5cd0969ad1d129568c0cfeb905.png)
JavaWab开发的总括以及HTML知识
一、Web开发的总括在这里我来给大家介绍一下Wab开发需要配合哪些前后端的对应语言:首先是Java(Java通常的工作):Wab开发android开发大数据开发另外,Wab开发想要学好就需要配合之前博客中的内容,如:多线程/IO/网络/数据结构/数据库......这里建议学懂前面的内容再往下走.JavaWab…...
![](https://www.ngui.cc/images/no-images.jpg)
Oracle数据库文件(*.dbf)迁移【图文教程】
目录 背景 解决 第1步:sqlplus登录 第2步:查看Oracle数据文件所在目录 第3步:修改表空间为离线状态 第4步: 移动数据库文件到新目录 第5步:修改表空间数据文件位置 第6步:修改表空间为online状态 第7步:临时表空间处理 第8步:验证修改是否成功 参考...
![](https://img-blog.csdnimg.cn/img_convert/1d64e4fd1caaf161f42463f99fa36a4d.png)
Java中如何创建和使用对象?
要想使用一个类则必须要有对象。在Java程序中可以使用new关键字创建对象,具体格式如下:类名对象名称null; 对象名称new 类名();上述格式中,创建对象分为声明对象和实例化对象两步,也可以直接通过下面的方式创建对象,具…...
![](https://img-blog.csdnimg.cn/2eeeb7a0366f4520af4ca846178adc47.jpeg)
Spring Cloud Alibaba--ActiveMQ微服务详解之消息队列(四)
上篇讲述高并发情况下的数据库处理方式:分布式事务管理机制。即使我们做到这一步并发情况只能稍微得到缓解,当然千万级别的问题不大,但在面对双十一淘宝这类的达上亿的并发的时候仅仅靠分布式事务管理还是远远不够,即使数据库可以…...
![](https://img-blog.csdnimg.cn/b5b7f7c2a9e347e1b3e2a066e47fcff7.png#pic_center)
32岁,薪水被应届生倒挂,裸辞了
今年 32 岁,我从公司离职了,是裸辞。 前段时间,我有一件事情一直憋在心里很难受,想了很久也没找到合适的人倾诉,就借着今天写出来。 我一个十几年开发经验,八年 软件测试 经验的职场老人,我慢…...
![](https://img-blog.csdnimg.cn/f80badfcf5e7445b9a18f15847d0d826.png)
蓝桥杯训练day1
前缀和差分1.前缀和(1)3956. 截断数组(2)795. 前缀和(3)796. 子矩阵的和(4)1230. K倍区间(5)99. 激光炸弹2.差分(1)797. 差分(2)差分矩阵(3)3729. 改变数组元素(4)100. 增减序列1.前缀和 (1)3956. 截断数组 方法1:暴力 先用两个数组分别保存前缀和,后缀…...
![](https://img-blog.csdnimg.cn/62f07a717eaf45789586e76aca250192.png)
Unity毛发系统TressFX Exporter
Unity 数字人交流群:296041238 一:在Maya下的TressFX Exporter 插件安装步骤: 1. 下载Maya的TressFX Exporter插件 下载地址:TressFX Exporter 链接:https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…...
![](https://img-blog.csdnimg.cn/0d8a9e91b43f42e7a20d800a1493d9de.png)
《爆肝整理》保姆级系列教程python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下。首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃了。不仅什么…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang:reflect反射的使用例子
1.reflect包作用 reflect包定义了“反射”相关能力,“反射”在计算机学中是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。基于反射特性可以通用化地解决一些需要频繁修改代码及硬编码问题,但是…...
![](https://img-blog.csdnimg.cn/4bb485ba9f164e87af899c792f1f3a69.gif#pic_center)
markdown常用语法--花括号(超详细)
💌 所属专栏:【Markdown常用语法】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! …...
![](https://img-blog.csdnimg.cn/img_convert/e2ec0520d4e84ddc90318768f555a85b.png)
BN、SyncBN、IN、LN、GN学习记录
1 BatchNormBN的原理BN是计算机视觉最常用的标准化方法,它沿着N、H、W维度对输入特征图求均值和方差,随后再利用均值和方差来归一化特征图。计算过程如下图所示,1)沿着通道维度计算其他维度的均值;2)沿着通…...
![](https://www.ngui.cc/images/no-images.jpg)
使用 Auto-scheduling 优化算子
本篇回答来源于 TVM 官方英文文档 Lianmin Zheng,Chengfan Jia。更多 TVM 中文文档可访问→https://tvm.hyper.ai/ 本教程将展示 TVM 的 Auto Scheduling 功能,如何在不编写自定义模板的情况下,找到最佳 schedule。 与基于模板的 AutoTVM 依…...
![](https://img-blog.csdnimg.cn/img_convert/f776204328d0099a35b54a19dcd26797.png)
智能运维应用之道,告别企业数字化转型危机
面临的问题及挑战 数据中心发展历程 2000 年中国数据中心始建,至今已经历以下 3 大阶段。早期:离散型数据中心 IT 因以项目建设为导向,故缺乏规划且无专门运维管理体系,此外,开发建设完的项目均是独立运维维护&#…...
![](https://www.ngui.cc/images/no-images.jpg)
第七章 SQL错误信息 - SQL错误代码 -400 到 -500
文章目录第七章 SQL错误信息 - SQL错误代码 -400 到 -500SQL错误代码和消息表WinSock错误代码-10050到-11002第七章 SQL错误信息 - SQL错误代码 -400 到 -500 SQL错误代码和消息表 错误代码描述-400发生严重错误-401严重连接错误-402用户名/密码无效-405无法从通信设备读取-4…...
![](https://img-blog.csdnimg.cn/dc2fc912129c409cbca38f48bf42718d.png)
DDFN: Decoupled Dynamic Filter Networks解耦的动态卷积
一、论文信息 论文名称:Decoupled Dynamic Filter Networks 论文:https://thefoxofsky.github.io/files/ddf.pdf 代码:https://github.com/theFoxofSky/ddfnet 主页:https://thefoxofsky.github.io/project_pages/ddf 作者团…...
![](https://www.ngui.cc/images/no-images.jpg)
NISP认证报名条件是什么?考试内容是什么?
科学技术是社会发展的第一生产力,每个国家为了能够获得更高的国际地位,不断提升自己的科学技术,现代最为先进的技术就是信息通信,在军事、民生、医疗、教育、制造等等领域都起着重要的作用,我们的生活也因为信息技术而…...
![](https://img-blog.csdnimg.cn/img_convert/3b85db4d539c3591b2e54318dcfda427.png)
利用redis实现缓存、发布订阅、分布式锁功能
Redis是一个内存键值存储数据库,通常用于缓存、会话管理、消息队列等场景。以下是一些常见的Redis使用场景:1.缓存:将常用的数据缓存在Redis中,以减少对数据库的访问次数,提高应用程序的性能。2.会话管理:使…...
![](https://img-blog.csdnimg.cn/0819aea3def84fa29e7c448f56b9c924.png)
SVN无法连接到服务器的各种问题原因及解决办法
SVN专业使用教程详解 第一节 安装VisualSVN Server服务器 第一步 下载SVN服务器,需要链接的请私信。 点击下载的执行文档进行安装 选择组件 选择在部署 VisualSVN Server 时安装VisualSVN Server 和 Administration Tools 组件。 调整初始服务器配置 或者&…...
![](https://www.ngui.cc/images/no-images.jpg)
React 基本使用
目录 React 安装 React基本使用 React脚手架 脚手架使用React JSX基本使用 JSX列表渲染 JSX条件渲染 JSX模板精简 JSX样式控制 JSX综合案例 React 安装 npm i react react-domnpm init -y(生成基础目录文件) <!-- 引入js文件 --><sc…...
![](https://img-blog.csdnimg.cn/img_convert/8dd304cacb97d125d8517a0cb7b3c1cf.png)
单例模式设计(面试题)
1、static修饰变量规则static修饰的静态成员属于 类而不是对象,所有的对象共享一份静态成员数据,所以不占用类的空间static修饰的成员,定义类的时候,必须分配空间static修饰的静态成员数据 必须类中定义 类外初始化静态成员变量可…...
![](https://img-blog.csdnimg.cn/b5ce06f4ea134eaf895683a4fbb5c975.png)
机器学习:基于支持向量机(SVM)进行人脸识别预测
机器学习:基于支持向量机(SVM)进行人脸识别预测 文章目录机器学习:基于支持向量机(SVM)进行人脸识别预测一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.准备数据2.业务理解3.数据理解4.数…...
![](/images/no-images.jpg)
环影视界wordpress企业主题/app推广注册招代理
序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行docker run --name redis-stat -p 8080:63790 -d insready/red…...
![](https://img-blog.csdnimg.cn/img_convert/1b8742ce59bd8f799d67733a11ef1ca8.png)
视频网站做app还是h5/宁波seo网络推广代理公司
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。⛄ 内容介绍构建直线阵列,圆阵列和平面阵列天线的数学模…...
![](https://img-blog.csdnimg.cn/img_convert/b1ba977acfcc994de3f853f6dc1628f7.png)
什么做网站站群/市场策划方案
逻辑删除你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。什么是逻辑删除?逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除…...
![](/images/no-images.jpg)
成全视频免费观看在线看电视剧/网站优化推广哪家好
最近偶有开发同事咨询 PostgreSQL 日期函数,对日期处理不太熟悉,今天详细看了下手册的日期函数,整理如下,供参考。 一 取当前日期的函数 --取当前时间skytf> select now(); now ---------------…...
![](/images/no-images.jpg)
网站开发用什么图片格式最好/域名注册网站有哪些
在在win7下安装了Ubuntu 13.04后,在grub中,win7启动想是最后一个,为了把win7设置为默认启动项,需要更改grub设置。google了半天,发现更改/etc /default/grub是无效的,打开/boot/grub/grub.cfg,里…...
![](/images/no-images.jpg)
湖南建设人力资源网和报考平台/齐三seo顾问
01 开启多条线程,每条线程都只下载文件的一部分(通过设置请求头中的Range来实现) 02 创建一个和需要下载文件大小一致的文件,判断当前是那个线程,根据当前的线程来判断下载的数据应该写入到文件中的哪个位置。…...