NO.1
思路:只需判断长度为2和3的回文子串。
代码实现:
#include<iostream>
#include<string>using namespace std;string s;int main()
{cin>>s;int n=s.size(),ret=-1;for(int i=0;i<n;i++){if(i+1<n&&s[i]==s[i+1]){ret=2;}if(i+2<n&&s[i]==s[i+2]){ret=3;}}cout<<ret<<endl;return 0;
}
NO.2
代码实现:
#include <iostream>
using namespace std;const int N=2e5+10;
int arr[N];
int g[N],f[N];
int n;int main() {cin>>n;for(int i=1;i<=n;i++) cin>>arr[i];for(int i=1;i<=n;i++){f[i]=g[i-1]+arr[i];g[i]=max(f[i-1],g[i-1]);}cout<<max(f[n],g[n])<<endl;return 0;
}
NO.3
思路:先排序,在利用滑动窗口,如果最左边和最右边值的差大于两倍的p就出窗口,更新结果。
代码实现:
#include<iostream>
#include<algorithm>using namespace std;const int N=1e6+10;
int arr[N];
int n,p;int main()
{cin>>n>>p;for(int i=0;i<n;i++) cin>>arr[i];sort(arr,arr+n);int left=0,right=0,ret=0;p*=2;while(right<n){while(arr[right]-arr[left]>p){left++;}ret=max(ret,right-left+1);right++;}cout<<ret<<endl;return 0;
}