双指针算法
思路:
以朴素思想(暴力)得到解决方案,根据条件,建立循环之间的关系,划掉一个循环
O(n^2)-->O(n)
简单输出字符串中单词,每个单词之间以空格相隔
简单思路:
for(int i=0;i<sz;i++){
if(str[i]!=' '){
putchar(str[i]);
}else if(str[i]==' '){
printf("\n");
}
}
双指针解法:
#include <stdio.h>
#include <string.h>
int main()
{
char str[1000];
int sz=strlen(str);
for(int i=0;i<sz;i++){
int j=i;
while(str[j]!=' ') j++;
for(int k=i;k<j;k++){
putchar(str[k]);
}
printf("\n");
i=j;
}
return 0;
}
abc def ghi
i
j
j
j
输出
i=j
i++
j
j
j
.....
#include<stdio.h>
const int N=100010;
int a[N],s[N];
void max(int x,int y){
int ret=x:x>y?y;
return ret;
}
int main()
{
int n;
int res=0;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++){
s[a[i]]++;
while(s[a[i]]>1){
s[a[j]]--;
j++;
}
res=max(res,i-j-1);
}
}