目录
- 1 知识点
- 2 模板
1 知识点
双指针算法的核心思想:
for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {//do somethings}
}
利用某些性质(比如单调性),将上面朴素算法优化到 O ( N ) O(N) O(N)。
以输出空格间隔的单词这道题为例,其双指针算法实现如下,
//s为字符串,它由一系列空格隔开的单词组成
//输出每个单词组成的字符串向量words
int n = s.size();
vector<string> words;
for (int i = 0; i < n; ++i) {int j = i;while (j < n && s[j] != ' ') {j++;}string word;for (int k = i; k < j; ++k) {word += s[k];}words.emplace_back(word);i = j; //更新i
}
2 模板
for (int i = 0, j = 0; i < n; ++i) {while (j < n && check(i,j)) {j++;}//每道题目的具体逻辑,即业务逻辑
}