这道题要分割出两个数组,平均值需要相等,那其实就相当于分出一个有k个元素的数组的平均值和整体数组的平均值相等就可以满足了,也就是 $target / k = sum / n$。那么 $target = sum * k / n$所以我们需要求的其实就是不同的 k 对应的和(target)是否等于 sum * k / n所以定义可达性 DP 数组如下:dpk 代表刚好 k 个数能组成的和有哪些,...
Articles published by SnowKagura
SnowKagura- Home
- SnowKagura
这道题跟 构建回文串检测 的思路很像,因为都是统计字符个数,然后看构造回文串的条件。因为是构造最长的回文串,所以思路略微有点不同,碰到字符频次为奇数的需要...
这道题有一个关键条件就是 l..r 之间的字符可以重排,那么我们只需要关注字符频次满足回文串要求即可。长度为偶数的情况下,需要满足所有的字符频次为偶数。长度为奇数的情况下,有一个字符是奇数频次。而字符频次可以巧妙的转换成用异或进行统计,因为只有奇数频次才会是1。然后因为我们是需要多次查询,所以可以提前进行预处理,像这种涉及区间查询的问题,常用的手段就是前缀和,这道题也不例外。构造一个 pre...
这道题用异或计算就可以解决,因为只缺失一个数字,那么对应的下标和数字都会抵消,剩下的一个就是答案func missingNumber(nums []int...
首先我们需要扩展区间,然后再降维,就可以满足概率分布扩展区间,调用两个 rand7 就能到 [1,49],为了 [1,10] 我们需要舍去 41-49,剩下的部分进行降维,也就是取余数即可func rand10() int { for { row := rand7() col := rand7() num := (row - 1) * ...