acwing算法基础之基础算法--双指针算法

目录

  • 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++;
	}
	//每道题目的具体逻辑,即业务逻辑
}

你可能感兴趣的:(Acwing,算法)