当前位置: 首页 > news >正文

【LeetCode与《代码随想录》】二叉树篇:做题笔记与总结-JavaScript版

文章目录

    • 代码随想录
    • 144. 二叉树的前序遍历
    • 94. 二叉树的中序遍历
    • 145. 二叉树的后序遍历
    • 102.二叉树的层序遍历
    • 226.翻转二叉树
    • 101. 对称二叉树
    • 104.二叉树的最大深度
    • 111.二叉树的最小深度
    • 222.完全二叉树的节点个数
    • 110.平衡二叉树
    • 257. 二叉树的所有路径
    • 404.左叶子之和
    • 513.找树左下角的值
    • 112. 路径总和
    • 106.从中序与后序遍历序列构造二叉树
    • 105. 从前序与中序遍历序列构造二叉树
    • 654.最大二叉树
    • 617.合并二叉树
    • 700.二叉搜索树中的搜索
    • 98.验证二叉搜索树
    • 530.二叉搜索树的最小绝对差
    • 501.二叉搜索树中的众数
    • 236. 二叉树的最近公共祖先
    • 235. 二叉搜索树的最近公共祖先
    • 701.二叉搜索树中的插入操作
    • 450.删除二叉搜索树中的节点
    • 669. 修剪二叉搜索树
    • 108.将有序数组转换为二叉搜索树
    • 538.把二叉搜索树转换为累加树
    • 相关题目
      • 107.二叉树的层次遍历II
      • 199.二叉树的右视图

代码随想录

代码随想录
代码随想录CSDN官方

前、中、后指的都是根的位置。

144. 二叉树的前序遍历

https://leetcode.cn/problems/binary-tree-preorder-traversal/

var preorderTraversal = function (root) {// 前序遍历:中 左 右let ans = []const dfs = function (root) {if (root === null) return;ans.push(root.val);dfs(root.left);dfs(root.right);}dfs(root);return ans;
};

94. 二叉树的中序遍历

https://leetcode.cn/problems/binary-tree-inorder-traversal/

var inorderTraversal = function (root) {let ans = []const dfs = function (root) {if (root === null) return;// 中序:左中右dfs(root.left);ans.push(root.val);dfs(root.right);}dfs(root);return ans;
};

145. 二叉树的后序遍历

https://leetcode.cn/problems/binary-tree-postorder-traversal/

var postorderTraversal = function (root) {let ans = []const dfs = function (root) {if (root === null) return;// 后序:左右中dfs(root.left);dfs(root.right);ans.push(root.val);}dfs(root);return ans;
};

102.二叉树的层序遍历

https://leetcode.cn/problems/binary-tree-level-order-traversal/

var levelOrder = function (root) {let ans = [], queue = []if (root === null) return ans;queue.push(root);while (queue.length) {let len = queue.length;let anss = [];for (let i = 0; i < len; i++) {let node = queue.shift();anss.push(node.val);node.left && queue.push(node.left);node.right && queue.push(node.right);}ans.push(anss);}return ans;
};

226.翻转二叉树

https://leetcode.cn/problems/invert-binary-tree/

var invertTree = function (root) {const dfs = function (root) {if (root === null) return;dfs(root.left);dfs(root.right);[root.left, root.right] = [root.right, root.left];}dfs(root);return root;
};

101. 对称二叉树

https://leetcode.cn/problems/symmetric-tree/

var isSymmetric = function (root) {let ans = true;if (root === null) return ans;if (root.left && root.right === null) return false;if (root.right && root.left === null) return false;const dfs = function (l, r) {if (!l && !r) return;if (l && !r) {ans = false; return;}if (!l && r) {ans = false; return;}if (l.val !== r.val) {ans = false;return;}dfs(l.left, r.right);dfs(l.right, r.left);}dfs(root.left, root.right);return ans;
};

104.二叉树的最大深度

https://leetcode.cn/problems/maximum-depth-of-binary-tree/

var maxDepth = function (root) {let ans = 0;if (!root) return ans;let q = [];q.push(root);while (q.length) {ans++;let len = q.length;for (let i = 0; i < len; i++) {let node = q.shift();node.left && q.push(node.left);node.right && q.push(node.right);}}return ans;
};

111.二叉树的最小深度

https://leetcode.cn/problems/minimum-depth-of-binary-tree/

var minDepth = function (root) {// 若一个节点没有叶子节点,则结束let ans = 0;if (!root) return ans;let q = [];q.push(root);while (q.length) {ans++;let len = q.length;for (let i = 0; i < len; i++) {let node = q.shift();if (!node.left && !node.right) return ans;node.left && q.push(node.left);node.right && q.push(node.right);}}
};

222.完全二叉树的节点个数

https://leetcode.cn/problems/count-complete-tree-nodes/

注意:要利用完全二叉树的性质。

var countNodes = function (root) {if (!root) return 0;let l = root.left, r = root.right;let ll = 0, rr = 0;while (l) {ll++; l = l.left;}while (r) {rr++; r = r.right;}if (ll === rr) {return Math.pow(2, ll + 1) - 1;}else {return countNodes(root.left) + countNodes(root.right) + 1;}
};

110.平衡二叉树

https://leetcode.cn/problems/balanced-binary-tree/

var isBalanced = function (root) {var getHeight = function (root) {if (!root) return 0;let l = getHeight(root.left);if (l === -1) return -1;let r = getHeight(root.right);if (r === -1) return -1;if (Math.abs(l - r) > 1) return -1;else return Math.max(l, r) + 1;}let ans = getHeight(root);if (ans === -1) return false;else return true;
};

257. 二叉树的所有路径

https://leetcode.cn/problems/binary-tree-paths/

var binaryTreePaths = function (root) {let ans = [], anss = [];var dfs = function (root) {anss.push(root.val);root.left && dfs(root.left);root.right && dfs(root.right);if (!root.left && !root.right) {ans.push(anss.join('->'));}anss.pop();}dfs(root);return ans;
};

404.左叶子之和

https://leetcode.cn/problems/sum-of-left-leaves/

var sumOfLeftLeaves = function (root) {let ans = 0;var dfs = function (root, flag) {if (!root) return;root.left && dfs(root.left, 1);root.right && dfs(root.right, 0);if (flag === 1 && !root.left && !root.right) {ans += root.val;}}dfs(root);return ans;
};

513.找树左下角的值

https://leetcode.cn/problems/find-bottom-left-tree-value/

var findBottomLeftValue = function (root) {// 记录bfs每一层的第一个let ans = root.val, q = [];q.push(root);while (q.length) {let len = q.length;for (let i = 0; i < len; i++) {let node = q.shift();if (!i) ans = node.val;node.left && q.push(node.left);node.right && q.push(node.right);}}return ans;
};

112. 路径总和

https://leetcode.cn/problems/path-sum/

var hasPathSum = function (root, targetSum) {let ans = 0, flag = false;var dfs = function (root) {if (root.left) {ans += root.left.val;dfs(root.left);ans -= root.left.val;}if (root.right) {ans += root.right.val;dfs(root.right);ans -= root.right.val;}if (!root.left && !root.right) {if (ans === targetSum) flag = true;}}if (root) {ans += root.val;dfs(root);}return flag;
};

106.从中序与后序遍历序列构造二叉树

https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

var buildTree = function (inorder, postorder) {if (!inorder.length) return null;let rootVal = postorder.pop();let rootIndex = inorder.indexOf(rootVal);let node = new TreeNode(rootVal);node.left = buildTree(inorder.slice(0, rootIndex), postorder.slice(0, rootIndex));node.right = buildTree(inorder.slice(rootIndex + 1), postorder.slice(rootIndex));return node;
};

105. 从前序与中序遍历序列构造二叉树

https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

var buildTree = function (preorder, inorder) {if (!preorder.length) return null;let rootVal = preorder.shift();let rootIndex = inorder.indexOf(rootVal);let node = new TreeNode(rootVal);node.left = buildTree(preorder.slice(0, rootIndex), inorder.slice(0, rootIndex));node.right = buildTree(preorder.slice(rootIndex), inorder.slice(rootIndex + 1));return node;
};

654.最大二叉树

https://leetcode.cn/problems/maximum-binary-tree/

var constructMaximumBinaryTree = function (nums) {// 数组的左右边界var dfs = function (l, r) {if (l > r) return null;let maxVal = -1, maxIndex = -1;for (let i = l; i <= r; i++) {if (nums[i] > maxVal) {maxVal = nums[i];maxIndex = i;}}const node = new TreeNode(maxVal);node.left = dfs(l, maxIndex - 1);node.right = dfs(maxIndex + 1, r);return node;}return dfs(0, nums.length - 1);
};

617.合并二叉树

https://leetcode.cn/problems/merge-two-binary-trees/

var mergeTrees = function (root1, root2) {// 参数:对应相同位置的两个节点var dfs = function (n1, n2) {if (!n1 && !n2) return null;if (n1 && !n2) return n1;if (n2 && !n1) return n2;let node = new TreeNode(n1.val + n2.val);node.left = dfs(n1.left, n2.left);node.right = dfs(n1.right, n2.right);return node;}return dfs(root1, root2);
};

700.二叉搜索树中的搜索

https://leetcode.cn/problems/search-in-a-binary-search-tree/

注意:要利用二叉搜索树的性质。

var searchBST = function (root, val) {let ans = null;var find = function (root) {if (root) {if (root.val === val) {ans = root;return;}if (val < root.val) find(root.left);if (val > root.val) find(root.right);}}find(root);return ans;
};

98.验证二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/

注意:要判断每一个子树是否是二叉搜索树。

要用到二叉搜索树的性质:其中序遍历是一个递增的序列。

var isValidBST = function (root) {let arr = [];var dfs = function (root) {if (root) {dfs(root.left);arr.push(root.val);dfs(root.right);}}dfs(root);let ans = true;for (let i = 1; i < arr.length; i++) {if (arr[i] <= arr[i - 1]) {ans = false;break;}}return ans;
};

530.二叉搜索树的最小绝对差

https://leetcode.cn/problems/minimum-absolute-difference-in-bst/

var getMinimumDifference = function (root) {let arr = [];var dfs = function (root) {if (root) {dfs(root.left);arr.push(root.val);dfs(root.right);}}let ans = 100000 + 1;dfs(root);for (let i = 1; i < arr.length; i++) {let temp = Math.abs(arr[i] - arr[i - 1]);ans = Math.min(ans, temp);}return ans;
};

501.二叉搜索树中的众数

https://leetcode.cn/problems/find-mode-in-binary-search-tree/

用了额外的空间:

var findMode = function (root) {let arr = []var dfs = function (root) {if (root) {arr.push(root.val);root.left && dfs(root.left);root.right && dfs(root.right);}}dfs(root);let ans = new Map();for (let i = 0; i < arr.length; i++) {ans.set(arr[i], (ans.get(arr[i]) || 0) + 1);}let anss = Array.from(ans);anss.sort((a, b) => (b[1] - a[1]));// console.log(anss)let res = [], num = anss[0][1];for (let i = 0; i < anss.length; i++) {if (anss[i][1] === num) {res.push(anss[i][0]);}else {break;}}return res;
};

没有用额外的空间:

var findMode = function (root) {let ans = [], maxx = 0, nowVal = 100000 + 1, nowNum = 0;var dfs = function (root) {if (root) {root.left && dfs(root.left);if (nowVal === root.val) {nowNum++;}else {nowNum = 1;nowVal = root.val;}if (nowNum === maxx) {ans.push(root.val);}else if (nowNum > maxx) {ans = [];maxx = nowNum;ans.push(root.val);}root.right && dfs(root.right);}}dfs(root);return ans;
};

两项的差距还是比较大的,建议练习“不用额外空间”的版本。

在这里插入图片描述

236. 二叉树的最近公共祖先

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

要找公共祖先,显然要从下往上找,即后序遍历

var lowestCommonAncestor = function (root, p, q) {var dfs = function (root) {if (root === null || root === p || root === q) {return root;}let l = dfs(root.left);let r = dfs(root.right);if (l && r) {return root;} else if (r) {return r;} else if (l) {return l;} else {return null;}}return dfs(root);
};

235. 二叉搜索树的最近公共祖先

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/

  • 要用二叉搜索树的性质:根节点与子树的大小关系
  • 从根往下遍历,若根节点的值大于pq的值,则往左子树遍历,反之亦然
  • 当第一次出现根的值在pq之间时,这就是最近的公共祖先
  • 原因:
  • 当出现根的值在pq之间时,说明pq一个在根的左子树,一个在根的右子树,若往左遍历会错过右子树的目标,若往右遍历会错过左子树的目标
  • 有没有可能此时的根不是最近的祖先节点,而是次近的?答:绝无可能。在数值上是不符合搜索二叉树的性质的。次近的祖先节点不会在pq的值之间,只会比max(p,q)大,或比min(p,q)小
var lowestCommonAncestor = function (root, p, q) {let ans = null;var dfs = function (root) {if (root && !ans) {if (root.val >= p.val && root.val <= q.val) {ans = root; return;} else if (root.val >= q.val && root.val <= p.val) {ans = root; return;}if (root.val >= p.val && root.val >= q.val) {dfs(root.left);}if (root.val <= p.val && root.val <= q.val) {dfs(root.right);}}}dfs(root);return ans;
};

701.二叉搜索树中的插入操作

https://leetcode.cn/problems/insert-into-a-binary-search-tree/

var insertIntoBST = function (root, val) {let ans = false;if (root === null) {root = new TreeNode(val);return root;}var dfs = function (root) {if (root && !ans) {if (val > root.val) {// 往右if (root.right) dfs(root.right);else {root.right = new TreeNode(val);ans = true;return;}}else if (val < root.val) {// 往左if (root.left) dfs(root.left);else {root.left = new TreeNode(val)ans = true;return;}}}}dfs(root);return root;
};

450.删除二叉搜索树中的节点

https://leetcode.cn/problems/delete-node-in-a-bst/

注意:分类讨论。

  • 要删除的key不存在
  • 要删除的key:
  • 是叶子节点(无左无右)
  • 不是叶子节点但只有一个子树
  • 不是叶子节点但有两个子树

注意根节点是key的情况。

var deleteNode = function (root, key) {// flag 1左节点删 2右节点删let find = false, parent = null, flag = 0;// 删除key节点var deletee = function (root, flag) {let node = null;if (flag === 1) {node = root.left;} else if (flag === 2) {node = root.right;}// 要删除节点为叶子节点if (!node.left && !node.right) {if (flag === 1) {root.left = null;} else if (flag === 2) {root.right = null;}return;}// 要删除的节点只有一个子节点else if (node.left && !node.right) {if (flag === 1) {root.left = node.left;} else if (flag === 2) {root.right = node.left;}return;}else if (node.right && !node.left) {if (flag === 1) {root.left = node.right;} else if (flag === 2) {root.right = node.right;}return;}// 要删除的节点有两个子节点else if (node.left && node.right) {// 右边接到左边let num = node.right.val, ans = false;var solve = function (roott) {if (roott && !ans) {if (num > roott.val) {if (roott.right) solve(roott.right);else {roott.right = node.right;ans = true; return;}}else if (num < roott.val) {if (roott.left) solve(roott.left);else {roott.left = node.right;ans = true; return;}}}}solve(node.left);if (flag === 1) {root.left = node.left;} else if (flag === 2) {root.right = node.left;}}}// 查找key节点是否存在var findKey = function (root) {if (root && !find) {if (root.left && root.left.val === key) {find = true;parent = root;flag = 1;return;}if (root.right && root.right.val === key) {find = true;parent = root;flag = 2;return;}findKey(root.left);findKey(root.right);}}// 根节点单独计算if (root && root.val === key) {// 左右子树都不为空if (root.left && root.right) {let ans = false, val = root.right.val;var dfs = function (node) {if (node && !ans) {if (val > node.val) {if (node.right) dfs(node.right);else {node.right = root.right;ans = true; return;}}if (val < node.val) {if (node.left) dfs(node.left);else {node.left = root.right;ans = true; return;}}}}dfs(root.left);return root.left;} else if (root.left) {return root.left;} else if (root.right) {return root.right;} else {return null;}}// 没找到findKey(root);if (find === false) return root;// 找到了deletee(parent, flag);return root;
};

上面代码写的乱七八糟的(像是半递归半模拟),下面是可读性更高的代码,来自《代码随想录》

其实就是用好递归。

var deleteNode = function (root, key) {if (!root) return null;if (root.val < key) {root.right = deleteNode(root.right, key);return root;}else if (root.val > key) {root.left = deleteNode(root.left, key);return root;} else {// 找到要删除的节点if (!root.left && !root.right) return null;else if (root.left && !root.right) return root.left;else if (root.right && !root.left) return root.right;else {// 左右节点都在let rightNode = root.right;let minNodee = minNode(rightNode);root.val = minNodee.val;root.right = deleteNode(root.right, minNodee.val);return root;}}
};var minNode = function (root) {while (root.left) {root = root.left;}return root;
}

669. 修剪二叉搜索树

https://leetcode.cn/problems/trim-a-binary-search-tree/

题解

var trimBST = function (root, low, high) {if (root === null) return null;if (root.val > high) return trimBST(root.left, low, high);if (root.val < low) return trimBST(root.right, low, high);root.left = trimBST(root.left, low, high);root.right = trimBST(root.right, low, high);return root;
};

108.将有序数组转换为二叉搜索树

https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/

var sortedArrayToBST = function (nums) {var dfs = function (l, r) {if (l > r) return null;let mid = Math.floor(l + (r - l) / 2);let root = new TreeNode(nums[mid]);root.left = dfs(l, mid - 1);root.right = dfs(mid + 1, r);return root;}return dfs(0, nums.length - 1);
};

538.把二叉搜索树转换为累加树

https://leetcode.cn/problems/convert-bst-to-greater-tree/

把二叉搜索树转为数组,数组累加后再赋值给二叉树。

var convertBST = function (root) {if (root === null) return null;let arr = [];var getNum = function (root) {if (root) {getNum(root.left);arr.push(root.val);getNum(root.right);}}getNum(root);for (let i = arr.length - 2; i >= 0; i--) {arr[i] += arr[i + 1];}var solve = function (root) {if (root) {solve(root.left);root.val = arr[i++];solve(root.right);return root;}}let i = 0;return solve(root);
};

更简洁的方法:累加的顺序是右中左,按照此顺序递归累加即可。

var convertBST = function (root) {// 右中左if (!root) return null;let ans = 0;var dfs = function (root) {if (root) {dfs(root.right);ans += root.val;root.val = ans;dfs(root.left);return root;}}return dfs(root);
};

相关题目

107.二叉树的层次遍历II

https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/

var levelOrderBottom = function (root) {let ans = [], queue = []if (root === null) return [];queue.push(root);while (queue.length) {let len = queue.length;let anss = []for (let i = 0; i < len; i++) {let node = queue.shift();anss.push(node.val);node.left && queue.push(node.left);node.right && queue.push(node.right);}ans.unshift(anss);}return ans;
};

199.二叉树的右视图

https://leetcode.cn/problems/binary-tree-right-side-view/

var rightSideView = function (root) {// 每一层的最后一个let ans = [], queue = [];if (root === null) return [];queue.push(root);while (queue.length) {let len = queue.length;for (let i = 0; i < len; i++) {let node = queue.shift();node.left && queue.push(node.left);node.right && queue.push(node.right);if (i === len - 1) {ans.push(node.val);}}}return ans;
};

相关文章:

【LeetCode与《代码随想录》】二叉树篇:做题笔记与总结-JavaScript版

文章目录代码随想录144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102.二叉树的层序遍历226.翻转二叉树101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角…...

机器人运动|浅谈Time Elastic Band算法

前言在自主移动机器人路径规划的学习与开发过程中&#xff0c;我接触到Time Elastic Band算法&#xff0c;并将该算法应用于实际机器人&#xff0c;用于机器人的局部路径规划。在此期间&#xff0c;我也阅读了部分论文、官方文档以及多位大佬的文章&#xff0c;在此对各位大佬的…...

【Linux】网络基础(1)

前言 相信没有网络就没有现在丰富的世界。本篇笔记记录我在Linux系统下学习网络基础部分知识&#xff0c;从关于网络的各种概念和关系开始讲起&#xff0c;逐步架构起对网络的认识&#xff0c;对网络编程相关的认知。 我的上一篇Linux文章呀~ 【Linux】网络套接字编程_柒海啦的…...

限流算法详解

限流是我们经常会碰到的东西&#xff0c;顾名思义就是限制流量。它能保证我们的系统不会被突然的流量打爆&#xff0c;保证系统的稳定运行。像我们生活中&#xff0c;地铁就会有很多护栏&#xff0c;弯弯绕绕的&#xff0c;这个就是一种限流。像我们抢茅台&#xff0c;肯定大部…...

Spark/Hive

Spark/HiveHive 原理Spark with HiveSparkSession Hive Metastorespark-sql CLI Hive MetastoreBeeline Spark Thrift ServerHive on SparkHive 擅长元数据管理Spark 擅长高效的分布式计算 Spark Hive 集成 : Hive on Spark : Hive 用 Spark 作为底层的计算引擎时Spark w…...

HashMap底层的实现原理(JDK8)

目录一、知识点回顾二、HashMap 的 put() 和 get() 的实现2.1 map.put(k, v) 实现原理2.2 map.get(k) 实现原理三、HashMap 的常见面试题3.1 为何随机增删、查询效率都很高&#xff1f;3.2 为什么放在 HashMap 集合 key 部分的元素需要重写 equals 方法?3.3 HashMap 的 key 为…...

操作系统-整理

进程 介绍 进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间&#xff0c;不同进程通过进程间通信来通信。由于进程占据独立的内存&#xff0c;所以上下文进程间的切换开销&#xff08;栈、寄存器、虚拟内存、文件句柄等&#xff09;比较大&#…...

系统换行符的思考

各系统换行符 换行符&#xff0c;也即是回车换行&#xff0c;因为表示为Carriage-Return和Line-Feed。 回车用Return-Carrige表示&#xff0c;简写为CR&#xff0c;字符表示为\r。 换行用Line-Feed表示&#xff0c;简写为LF&#xff0c;字符表示为\n。 由于历史原因&#xf…...

Wwise集成到unreal

1、Wwise集成到Unreal 1.1 安装必要的软件 安装unreal 5.1&#xff1b;安装Audiokinetic Launcher&#xff1b;集成版本是Wwise 2021.1.12.7973。Audiokinetic Launcher下载地址&#xff1a; https://www.audiokinetic.com/zh/thank-you/launcher/windows/?refdownload&pl…...

前端秘籍之=>八股文经卷=>(原生Js篇)【持续更新中...】

大家好&#xff0c;最近想了想&#xff0c;打算总结归纳一版前端八股文经卷&#xff0c;给大家提供学习参考&#xff0c;如果帮助到大家&#xff0c;请大家&#xff0c;一键三连支持一下&#xff0c;你们的支持会激励我更加努力的更新更多有用的知识&#xff0c;博主先在这里谢…...

【Python安装配置教程】

Python由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年代初设计&#xff0c;作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c;使它成为多数平台…...

Spring-Retry失败重试

文章目录 重试的场景引入依赖启动类serviceController@Retryable参数@Recover注意事项重试的场景 1、网络波动需要,导致请求失败,需要重发。 2、发送消息失败,需要重发,重发失败要记录日志 … 引入依赖 <!-- spring-retry--> <dependency><groupId>or…...

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录DETR1. 亮点工作1.1 E to E1.2 self-attention1.3 引入位置嵌入向量1.4 消除了候选框生成阶段2. Set Prediction2.1 N个对象2.2 Hungarian algorithm3. 实例剖析4. 代码4.1 配置文件4.1.1 数据集的类别数4.1.2 训练集和验证集的路径4.1.3 图片的大小4.1.4 训练时的批量…...

项目ER图和资料

常用的数据类型 模型类 一对多 from app import db import datetimeclass BaseModel(db.Model):__abstract__ Truecreate_time db.Column(db.DateTime,defaultdatetime.datetime.now())update_time db.Column(db.DateTime,defaultdatetime.datetime.now())class Role(db.M…...

剑指 Offer 20. 表示数值的字符串(java+python)

请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘E’ &#xff0c;后面跟着一个 整数…...

程序员的逆向思维

前要&#xff1a; 为什么你读不懂面试官提问的真实意图&#xff0c;导致很难把问题回答到面试官心坎上? 为什么在面试结束时&#xff0c;你只知道问薪资待遇&#xff0c;不知道如何高质量反问? 作为一名程序员&#xff0c;思维和技能是我们职场生涯中最重要的两个方面。有时候…...

吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试进阶方向 测试进…...

mysql慢查询:pt-query-digest 分析

"某些SQL语句执行效率慢"&#xff0c;这个问题总体上分为两类&#xff1a; 出现了慢查询语句某些查询语句没有使用索引 由于数据的写入量非常大&#xff0c;所以要想直接打开慢查询日志来查看到底哪些语句有问题几乎是不可能的&#xff0c;因为日志的刷新速度太快了…...

git的使用整合

git的下载和安装暂时不论述了&#xff0c;将git安装后会自动配置环境变量&#xff0c;所以环境变量也不需要配置。 一、初始化配置 打开git bash here(使用linux系统下运行的口令)&#xff0c;弹出一个类似于cmd的窗口。 &#xff08;1&#xff09;配置属性 git config --glob…...

XCPC第九站———背包问题!

1.01背包问题 我们首先定义一个二维数组f&#xff0c;其中f[i][j]表示在前i个物品中取且总体积不超过j的取法中的最大价值。那么我们如何得到f[i][j]呢&#xff1f;我们运用递推的思想。由于第i个物品只有选和不选两种情况&#xff0c;当不选第i个物品时&#xff0c;f[i][j]f[i…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...