这道题有一个关键条件就是 l..r 之间的字符可以重排,那么我们只需要关注字符频次满足回文串要求即可。长度为偶数的情况下,需要满足所有的字符频次为偶数。长度为奇数的情况下,有一个字符是奇数频次。而字符频次可以巧妙的转换成用异或进行统计,因为只有奇数频次才会是1。然后因为我们是需要多次查询,所以可以提前进行预处理,像这种涉及区间查询的问题,常用的手段就是前缀和,这道题也不例外。构造一个 pre...
Articles in the category of 编程技术杂谈与总结
- Home
- 编程技术杂谈与总结
这道题用异或计算就可以解决,因为只缺失一个数字,那么对应的下标和数字都会抵消,剩下的一个就是答案func missingNumber(nums []int...
首先我们需要扩展区间,然后再降维,就可以满足概率分布扩展区间,调用两个 rand7 就能到 [1,49],为了 [1,10] 我们需要舍去 41-49,剩下的部分进行降维,也就是取余数即可func rand10() int { for { row := rand7() col := rand7() num := (row - 1) * ...
最小覆盖子串这道题是需要从 s 中找到覆盖 t 中所有字符的最短子串,所以我们首先需要维护一个 map 去保存对应的字符出现次数,再用一个变量保存需要的字...
首先,我们能知道 f(1, k) = 0,然后看 f(2, k) 是怎么来的。比如 f(2, 1),我们知道会删除掉第一个数,然后就变成 f(1, 1),这个时候相对于原本的索引有什么样的变化呢?【0】【1】【】【1】上面的1,在 f(1, 1) 是被看作 0 的,因为是从第 k+1 个数开始被算作 0 了,那么反推回原本的索引应该是 (f(1, 1) + 1) % 2,也就是 1。那么我们...