【双指针】

1、输入一个字符串,将字符串中的单词按照空格分隔开来(分别打印出来)。
假设这个字符串的开头是没有空格的,并且每两个单词中间只有一个空格。

#include
using namespace std;

int main(){
    
    char str[111];
    
    // gets(str);
    fgets(str,111,stdin);
    
    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张图片
2、最长连续不重复子序列
题目

#include
using namespace std;
const int N = 100000 + 11;

int a[N],b[N];

int main(){
    int n = 0;
    cin>>n;
    
    for(int i=0;i<n;i++)    cin>>a[i];
    
    int res = 0;
    for(int i=0,j=0;i<n;i++){
        b[a[i]]++;
        while(b[a[i]]>1){
            b[a[j]]--;
            j++;
        }
        res = max(res,i-j+1);
    }
    cout<<res;
    return 0;
}

3、数组元素的目标和
题目

#include
using namespace std;
const int N = 100000 + 11;

int a[N],b[N];

int n,m,x;

int main(){
    cin>>n>>m>>x;
    
    for(int i=0;i<n;i++)    cin>>a[i];
    for(int i=0;i<m;i++)    cin>>b[i];
    
    for(int i=0,j=m-1;i<n;i++){
        while(j>=0&&a[i]+b[j]>x)    j--;
        if(a[i] + b[j] == x){
            cout<<i<<" "<<j;
            break;
        }
    }
    return 0;
}

你可能感兴趣的:(algorithm,算法,c++,数据结构)