1、如果一组数的最大公因数不是1,则它们不能表示的数为无限个。
例如2,3的最大公因数是1,但只有1不能表示出来;2,4,6最大公因数是2,它们所有奇数都无法表示;
——蓝桥杯2017A8包子凑数 传送门
2、某个字符:(当前的下标减去上一次出现的下标)乘以(下一次出现的下标减去当前下标) 就是这个字符在多少个字符串中只出现过一次。
——蓝桥杯2020字串分值和 传送门1:传送门 传送门2:传送门
3、leetcode 136.指出现一次的数字 传送门
利用异或运算,一个数和自己异或为0,而0与任何数异或都为另一个数4^1^1=1
(n&1)的结果是n的二进制表示的个位&1
4、leetcode 109.颠倒二进制位 传送门
for (int i = 0; i < 32; ++i)
{
//每次res往左移动一位,则res的个位变成了0,再或上n的个位,就相当于把n的个位直接拼接再res的个位上
res = (res << 1) | (n & 1);
n >>= 1;//n右移一位;
}
5、 ST表
6、
7、构造一棵哈夫曼树的思路 传送门
(1)根据给定的n个权值{w1,w2,w3,…,wn}构成n棵二叉树的集合F={T1,T2,T3,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空.
(2)在集合F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,新二叉树的根结点的权值为其左右子树上根结点的权值之和.
(3)在集合F中删除这两棵树,同时将新得到的二叉树加入F中.
(4)重复步骤(2)、(3),直到F中只含一棵树为止,这棵树就是一棵赫夫曼树.
8、sizeof
char c[] = "asdsds";
char* cc = c;
char cn[40] = "asdsds";
int a[] = {1,2,3,4,5,6};
int* aa = a;
cout << sizeof(c) << sizeof(cc) << sizeof(cc) << sizeof(cn);
cout << sizeof(a) << sizeof(aa) << sizeof(aa);
结果输出:
sizeof(c) = 7 //c是数组,计算到'\0'位置,结果为6 * 1+1=7
sizeof(cc) = 8 //cc为指针类型,大小为8
sizeof(*cc) = 1 //*cc指向c的第一个字符,大小为1
sizeof(cn) = 40 //开辟40个char空间,大小为40 * 1=40
sizeof(a) = 24 //a是数组,但不需计算到'\0',结果为6 * 4=24
sizeof(aa) = 8 //aa为指针类型,大小为8
sizeof(*aa) = 4 //*aa指向a的第一个数字,大小为4
9、
1~n中有多少个数是p的倍数 n/p下取整;
1~n中能同时被k1,k2....kn整除的数有多少个,k1,k2,....,kn的最小公倍数为m,则有n/m下取整个
10、处理有空格的字符串输入 传送门
cin 写法 cin会自动忽略空格
getline(cin,str) 会连空格一起读入
不间断更新~
挺好的结论 有题嘛 ?
谢谢提醒,以后尽量把题放在结尾~