一、二分
1.475 暖气最小半径
对每个house找到大于它位置最近的暖气,和左边最近的。
使用lower_bound(heaters.begin(),heaters.end(),housesi);
在访问*it的时候,要判断it是不是end,在减1的时候要判断是不是begin。
2.29 除法实现
不能使用乘法、取模这些
是使用的是从b到2b到4b,看当前的数能不能比这个大。
二、哈希
1.884不常见的单词
lambda的使用
auto insert=\&(const string&s){
stringstream ss(s);
string word;
while(ss>>word){
++freqmove\[word);
}
};
2.380常数时间插入删除查找
使用map去存储某个数以及位置,使用vector实际的存储,每次都是交换最后一个然后pop_back
三、字符串
1.680 验证回文串2
考察的是去调用另一个函数跳过不等的。使用||
2.686重复叠加字符串匹配
考察的是多少个a能覆盖b,主要是考察对w.find(b)!=string::npos的使用
3.819 最常见的单词
考察对单词的处理
4.6 z字形变换
考察的是首先判断行数,然后逐行移动去push_back
5.17 电话号码组合
考察的是递归