双指针
799. 最长连续不重复子序列
https://www.acwing.com/problem/content/801/
- 解析:双指针算法:$O(n)$;i一直往前;j往左最远能到什么地方;
1 |
|
800. 数组元素的目标和
给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。
请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。
https://www.acwing.com/problem/content/description/802/
- 双指针:j指针不会退后
1 |
|
位运算
比如查看数n的二进制表示中第k位是几?
- 先把第k位移动到最后一位:
n >> k
- 看个位是几?
x & 1
结合就是n >> k & 1
.
801. 二进制中1的个数
lowbit(x)
:返回x的最后一位1; x & -x
。
-x
等价于~x + 1
:
比如:x = 1010... 1000
;
那么:~x = 0101... 0111
;
~x +1 = 0101... 1000
;
x & (~x +1)=0..0...1000
;
应用就是得到x
中1的个数。
1 |
|
离散化
802. 区间和
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。
现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。
近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。
https://www.acwing.com/problem/content/804/
1 | /* |
区间合并
步骤1:按区间左端点排序;
步骤2:那么会三种情况:重叠、半重叠、不重叠;
1 | //步骤1:按区间左端点排序; |