lsmCC 发表于 2023-11-17 23:14:12

这题感觉用双指针写,但是不会,求教怎么写

#include <bits/stdc++.h>
usingnamespace std;
const int N=3e5;
int a;
intmain()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
      cin>>a;
    }
    int cnt=1;
    for(int i=1;i<=n;i++)
    {
      int x=i,y=n;
      while(x<y&&a!=a)x++,y--;
      cnt+=y-x;
      
    }
    cout<<cnt<<endl;
}

isdkz 发表于 2023-11-17 23:14:23

你可以尝试使用双指针来解决这个问题。在这段代码中,你已经使用了一种双指针的方法,但是似乎有一些小问题。在这个循环中,你使用了两个指针x和y来遍历数组a,并且当a不等于a时增加cnt的值。但是在这个过程中,你可能会漏掉一些情况,导致cnt的值不准确。

你可以尝试以下的双指针方法来解决这个问题:

#include <bits/stdc++.h>
using namespace std;
const int N=3e5;
int a;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
      cin>>a[ i];
    }
    int cnt=0;
    int x=1, y=n;
    while(x<y)
    {
      if(a!=a)
      {
            cnt++;
      }
      x++;
      y--;
    }
    cout<<cnt<<endl;
}


在这个代码中,我们使用了两个指针x和y来遍历数组a,当a不等于a时增加cnt的值。同时,我们将cnt的初始值设为0,因为我们只关心不相等的情况。这样可以确保cnt的值是准确的。

Mike_python小 发表于 2023-11-17 23:15:02

这段代码使用了双指针算法来解决问题。让我解释一下这段代码的功能和实现方法:


#include <iostream>
using namespace std;

const int N = 3e5;
int a;

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
      cin >> a;
    }
    int cnt = 1;
    for (int i = 1; i <= n; i++) {
      int x = i, y = n;
      while (x < y && a != a) {
            x++;
            y--;
      }
      cnt += y - x;
    }
    cout << cnt << endl;
    return 0;
}


在这段代码中,我们通过两个指针 x 和 y 来扫描数组。初始时,x 指向当前元素,y 指向数组末尾。然后,我们不断地比较 a 和 a,并移动指针直到找到相等的元素或者 x >= y。一旦找到相等的元素,我们就累加 y - x 到计数器 cnt 中,因为从 x 到 y 的元素都能和 a 构成回文对。

希望这个解释能够帮助你理解双指针算法在这段代码中的应用。如果还有其他问题,欢迎继续提问。
页: [1]
查看完整版本: 这题感觉用双指针写,但是不会,求教怎么写