B-小红的好数组(牛客周赛 Round 63)

题目链接: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!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值