双指针算法
严格来说的话只是一种解题技巧,实际上就是用两个指针来解决一道题.
也有一些题目可能会遇到三指针或四指针,核心思想都大差不差.
大概分为以下三种:
普通双指针:两个指针往同一个方向移动
对撞双指针:两个指针面对面移动
快慢双指针:一个慢指针,一个快指针
核心思想:
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) 改善左边的暴力解法 使时间复杂度从O(n^2)降到O(n)
两种指法:
一般套路:
for(i=0,j=0;i<n;i++) //对i进行遍历
{
While(j<i&&cheak(I,j) j++; //j<i是j的位置 cheak(I,j)看题目具体情况分析
******* //每道题目具体逻辑
}
例题:输入一个字符串 每个单词用空格隔开 要求把每个单词单独输出 每个单词占一行
例如
输入:how are you
输出:how
are
you
#include<iostream>
#include<string>
using namespace std;
int mian()
{
char str[1000];
gets(str);
int n=strlen(str);
for(int i=0;i<n;i++)
{
int j=i;
while(j<n&&str[j]!=' ') j++;
for(int k=i;k<j;k++) cout<<str[k];
cout<<endl;
i=j;
}
return 0;
}
参考视频:
1.acw基础算法课