1 | 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 |
1 | class Solution { |
1 | 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 |
1 | class Solution { |
1 | 给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。 |
1 | class Solution { |
1 | 给你一个整数 n ,请你将 1 到 n 的二进制表示连接起来,并返回连接结果对应的 十进制 数字对 109 + 7 取余的结果。 |
数字每次被左移了i的二进位数字的长度,因此数字每次左移i的二进制长度的位数再加上i即可求出结果,为了防止溢出,需要对结果求模
$(a + b) % p = (a % p + b % p) % p$
1 | class Solution{ |
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
$(a + b) % p = (a % p + b % p) % p (1)$
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
a ^ b % p = ((a % p)^b) % p (4)
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((ab) % p * c)% p = (a * (bc) % p) % p (6)
交换律:
(a + b) % p = (b+a) % p (7)
(a * b) % p = (b * a) % p (8)
分配律:
((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)
重要定理
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)
若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)
若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)
难度中等473收藏分享切换为英文接收动态反馈
给你一个二进制字符串数组 strs
和两个整数 m
和 n
。
请你找出并返回 strs
的最大子集的大小,该子集中 最多 有 m
个 0
和 n
个 1
。
如果 x
的所有元素也是 y
的元素,集合 x
是集合 y
的 子集 。
示例 1:
1 | 输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3 |
示例 2:
1 | 输入:strs = ["10", "0", "1"], m = 1, n = 1 |
提示:
1 <= strs.length <= 600
1 <= strs[i].length <= 100
strs[i]
仅由 '0'
和 '1'
组成1 <= m, n <= 100
1 | class Solution { |
1 | class Solution { |
定义子问题$P(i,W)$为:在前$i$个物品中挑选总重量不超过$w$的物品,每种物品至多只能挑选1个,使得总价值最大;这时的最优值记作$dp(i,W)$,其中$1<=i<=n$ , $1<=w<=c$
考虑第$i$件物品,无外乎两种可能:选,或者不选。
最优方案就是比较这两种方案,哪个会更好些:
$dp(i,W)=max{dp(i-1,W),dp(i-1,W-w_i)+v_i}$
得到
$dp(i, W)=\left{\begin{array}{ll}
0 & \text { if } i=0 \
0 & \text { if } W=0 \
dp(i-1, W) & \text { if } w_{i}>W \
\max \left{dp(i-1, W), v_{i}+dp\left(i-1, W-w_{i}\right)\right} & \text { otherwise }
\end{array}\right.$
算法:
参考文献
1 | 给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。 |
1 | class NumArray { |
1 | // 构建线段树 |
1 | 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。 |
将每个格子抽象成图中的一个点;
将每两个相邻的格子之间连接一条边,长度为这两个格子本身权值的差的绝对值;
需要找到一条从左上角到右下角的「最短路径」,其中路径的长度定义为路径上所有边的权值的最大值。
「并查集」:我们可以将所有边按照长度进行排序并依次添加进并查集,直到左上角和右下角连通为止。
1 | class Solution { |
参考文献
1 | 作者:zerotrac2 |
1 | 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。 |
1 |
|
1 | 给你两个整数数组 source 和 target ,长度都是 n 。还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。 |
注意!有重复数字,因此需要判断每一个重复的
1 | class Solution{ |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true