$$ “算法人 ,算法魂, 研究算法的是人上人.”$$
新开一个分享贴子,把自己的心得以及每天收获的知识点,记录下来,一起加油吧
1.判断奇数与偶数
num 是我们要进行判断的数 , if(num & 1 == 1) 表示奇数 , 对不对呢?
答:结果对,但是在运算顺序上 , == 的运算优先级高于& ,所以他会这样执行if (num & (1 == 1))
感谢 @lsz_ 对知识点1的完善
2.64MB 可以开 1 3421 7728 个int
3.dfs的一个注意点
void dfs(int u)
{
此处为代码
dfs(u ++) ;
}
答:这里不得不提到自增的顺序了,debug了我好久 ,大家引以为戒
4.数字0 与 1 互换
a = 1 - a ; // QAQ 我怎么想不到
答:还有一些判断等实现方法,就不写啦
5.如何从一堆数字中快速地找到之前出现过的数
答:哈希—— O(1) 二分 —— O(nlogn)
6. 内存的知识点
1B(字节)=8b(位)
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1TB = 1024GB
7. 有关重载比较的知识点
1. 有关sort的知识
(1). sort在 C++ 中默认从小到大排序
(2). 对于数组
例 a[N] , sort(a , a + N) ;
对于地址
例 vector<int> a , sort(a.begin() , a.end())
(3). 大致而言
sort(初始位置 , 终止位置);
(4). sort函数的另一种传参方式
sort(初始位置 , 终止位置 , cmp)
其中bool cmp()函数即为我们可以重写的函数,默认重写小于号,这个记住就好,sort排序,重写小于号
2. 有关大小根堆(priority_queue)的知识
(1). priority_queue<int> q; // 大根堆
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
3. 有关如何重写比较运算符的事情
不知道有没有萌新跟我一样不会写重载比较运算符,你不懂这样写的逻辑,不知道为什么这样写就按照你的逻辑排好序了
(1). 先介绍写法
bool cmp(int a , int b) // 当成一个函数写
{
return a > b ;
}
在结构体中的写法
struct Student{
string id ;
int grade ;
bool operitor< (const Student& t) const
{
if (grade != t.grade) return grade > t.grade ;
else return id < t.id ;
}
}
(2). 教你怎么看懂
首先看上面两个例子的排序方法
第一个 —— a > b : 所以你就顺着它走,即从大往小排
第二个 —— if (grade != t.grade) return grade > t.grade : 如果成绩不相等,按照成绩从大往小排(你注意看,它是大于号)
else return id < t.id :如果成绩相等,按照id从小往大排
顺着它看就好,你可以去网上找一找类似的代码,练一下!
8. 指针异常的调试技巧
exit(0) ; // 强行终止程序
写一个程序
void f()
{
exit(0) ;
}
然后再主函数上利用f(),来寻找出错的代码在哪里
9.一个常考的知识点
若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1.
```
更新日志
2023.02.27 更新分享1条
2023.02.28 更新分享3条
2023.03.06 更新分享1条
2023.03.08 更新分享2条
2023.03.12 更新分享1条
2023.03.16 更新分享1条
这个是对的吧,
$~~~~num\& (1==1)$
$=num\& 1$
这不就是判断奇数的语句吗?
确实,其实我就是想说运算优先级的问题,是我不严谨了
讲的是逻辑的问题,没想到Orz,hhhhhh
hh