数位DP


数位DP

数位 DP 是「统计 $[1, n]$ 内满足某性质的数字个数」这类题的专用咏唱,模板一旦焊死,剩下的只是换性质。本合集收录数位 DP 题目。

模板

leetcode 2376

题意:如果一个正整数的各位数字互不相同,就称它为特殊整数;给定正整数 n,统计 $[1, n]$ 中特殊整数的个数。

模板题。用记忆化搜索实现比递推直观得多,状态需要携带四样信息:

  1. i:当前填到第几位;
  2. mask:已选数字的集合,避免重复选数;
  3. is_limit:前面是否一直顶着上界在填——顶着上界时,当前位的可选范围受 n 对应位限制,否则 0 到 9 随便填;
  4. is_num:前面是否已经填过非零数...

Read more

优化DP


优化DP

朴素转移超时,不是 DP 的终点,而是优化的起点。本合集收录「先写对、再打磨复杂度」的 DP 优化技巧题(状态怎么设计的题在《DP 状态设计》里)。

前缀和优化

leetcode 3699

题意:统计长度为 n、每个元素都在 $[l, r]$ 内的数组个数,要求相邻元素不相等,且任意连续三个元素都不构成严格递增或严格递减(即上升、下降交替出现),答案对 $10^9+7$ 取模。$3 \le n \le 2000$,$1 \le l < r \le 2000$。

寻找子问题:如果长度为 i 的序列此刻是「递增收尾」的(第 i 个数大于第 i-1 个数,下标从 1 开始),那它的前...

Read more

堆


堆

堆只会两招:弹最值、塞新值。但配上贪心,这两招足以打穿一整个题库——反悔堆更是贪心流的后悔药,吃下去连悔棋都是 $O(\log n)$ 的。本合集收录堆类题目。

第 k 大/小

leetcode 264

最小堆解法:先把最小的丑数 1 入堆,每次弹出最小值 x,把 2x、3x、5x 入堆,用哈希表去重。弹 n 次即得第 n 个丑数,时间复杂度 $O(n \log n)$。

leetcode 373

枚举所有点对至少 $O(n^2)$ 起步,必须利用两数组非递减的性质。想象一个矩阵:纵坐标是 nums1 下标,横坐标是 nums2 下标,矩阵值是数对和。这个矩阵每行非递减、每列也非递减...

Read more

二叉树


二叉树

树题是刷题修行的主线任务之一。本合集按套路分节收录二叉树题目:每题给出关键观察、做法与复杂度。

二叉搜索树

BST 的第一反应是中序遍历——中序遍历 BST 会得到一个严格递增的序列,大量题目围绕这条性质展开。

leetcode 2476

中序遍历得到递增序列,对每个询问在序列上做一次二分查找。中序遍历 $O(n)$,每个询问 $O(\log n)$,记询问数为 q,整体 $O(n + q \log n)$。

leetcode 1932

合并 BST。需要先观察出两条性质:

  1. 根节点是唯一的。 能成为最终根的树,其根值没有出现在任何叶子上,也就无法「被」合并;如果这样的树不止一棵...

Read more

一文解决逆序数


一文解决逆序数

数组里满足 i < j 且 a[i] > a[j] 的一对下标叫一个逆序对,逆序数就是这种对的总数。一道逆序数,四种写法,从面试到竞赛一网打尽。计算逆序数有两种思路:

  1. 归并排序:合并左右两个已排好序的半段时,每当右半段的元素先出列,答案就加上左半段还没出列的元素个数(面试版代码里的 n - p1)。两边相等时让左边先出列,所以比较用严格的 >:写成 >= 会把相等的数也算成逆序,[2,2,2,2] 会得到 6 而不是 0;
  2. 值域计数:先把值离散化成名次 rank(值在去重排序后的位置,取 1 到 m,m 是不同值的个数),从左往右逐个把元素 rank 位置的计数加一;当...

Read more

mmpretrain增加回归任务组件


mmpretrain 增加回归任务组件

mmpretrain 原生只服务分类任务。本文把它魔改出完整的回归能力:自定义数据集、预处理器、回归器、回归头、MAE 损失与评估指标、推理器,一路改到 gradio 演示,全程沿 mm 系列的注册器机制进行,不破坏框架原有结构。

openmmlab介绍

openmmlab系列框架在2023年全面进入2.0时代,官方把自监督mmselfsup和分类mmclassification两个项目合并成mmpretrain。
openmmlab 2.0系列底层是有一些变化的,最大变化是从mmcv中抽离出功能更强大的mmengine。新的项目我还没仔细看过,目...

Read more

django设置时区支持导致mysql查询报错


django 设置时区支持导致 mysql 查询报错

背景:为什么要开 USE_TZ

在 django settings 中设置 USE_TZ = True 是官方推荐的做法,也是 django 5.0 之后的默认值(2024 年补注:django 5.0 发布于 2023 年 12 月,写这篇时还没有)。官方文档的说明:

当启用对时区的支持时,Django 在数据库中以 UTC 为单位存储日期时间信息,在内部使用具有时区的日期时间对象,并在模板和表单中将其转换为最终用户的时区。

如果用户居住在多个时区,这会很方便:你要根据用户的时间来显示日期信息。

即使你的网站只在一个时区提供服务,...

Read more

yolov5 fp16动态输入转TensorRT部署到triton服务


yolov5 fp16 动态输入转 TensorRT 部署到 triton 服务

把 yolov5 训练出的 PyTorch 模型转换成 TensorRT 模型,扔进 triton 里部署。一条看似官方全程护航的流水线,实际每一步都有暗雷,本文按流程逐个排掉。

需求

  1. 为加快推理速度,把 fp32 精度的模型转成 fp16;
  2. 为支持 yolov5 动态 padding 和批推理,输入的 batch 和图片 size 需要是动态的。

版本

转换机(把 pt 转成 engine 的机器):

  • yolov5:截图里的 export.py 代码与 v6.2 写法一致(见下方 2026 年补注)
  • ...

Read more