题目链接:B-小红的好数组
题目:
解:
这是一个双指针类型的题。经过分析可知,只要长度为k的一个数组中相对称的只要有一对的值是不同的,其他对的值都是相等的则为好数组。首先我们可以通过一层循环枚举一个长度为k的数组的最左边的位置,然后利用双指针的想法看这个长度为k的数组左右对称不同的位置有几个,如果仅有一个则满足题意为好数组,否则不是好数组。GAME OVER
话不多说 上 code
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int N = 1e3 + 10;
int a[N];
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n , k;
cin >> n >> k;
int ans;
for(int i = 1; i <= n ; i ++) cin >> a[i];
for(int i = 1; i <= n - k + 1 ;i++) { //在长度为n的数组中找长度为k的子数组 左边能达到最大的位置就是 n - k + 1
int cnt = 0;
int l = i, r = k + i - 1; // 左端点为 i 右端点为 k + i - 1
while( l <= r) { // l < r 和 l <= r 都可以
if(a[l] != a[r]) cnt++;
l ++ ; //左端点右移
r -- ; //右端点左移
}
if(cnt == 1) ans ++;
}
cout << ans;
return 0;
}
End!


&spm=1001.2101.3001.5002&articleId=142915091&d=1&t=3&u=fba190cf209c4eecbe12ba482945c299)
1560

被折叠的 条评论
为什么被折叠?



