#include <iostream>
#include <string.h>
using namespace std;
// 双指针算法的两种形式
// (1)、两个指针共同维护一个序列,快排
// (2)、两个指针维护两个序列,归并排序
bool check(int i, int j)
{
// 是否满足某种性质
return true; // or false
}
int main()
{
int i;
int j;
int n = 100;
// 双指针算法比较通用的模板
for (i = 0, j = 0; i < n; i++)
{
while (j < i && check(i, j))
{
j++;
}
// 题目的具体逻辑
}
// 具体例子,分割英文句子中的单词
char str[1000];
gets_s(str);
int length = strlen(str);
for (int i = 0; i < length; i++)
{
int j = i;
while (j < length && str[j] != ' ')
{
j++;
}
// 这道题的具体逻辑
for (int k = i; k < j; k++)
{
cout << str[k];
}
cout << endl;
i = j;
}
return 0;
}
双指针算法例题
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
int a[100010];
int s[100010];
// 找出 n 长度的数列中 最长的不包含重复数字的连续子序列
int main()
{
int n = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
int res = 0;
for (int i = 0, j = 0; i < n; i++)
{
s[a[i]]++;
while (s[a[i]] > 1)
{
s[a[j]]--;
j++;
}
res = max(res, i - j + 1);
}
cout << res << endl;
return 0;
}