Grade 9 · One-dimensional arrays (vectors)Citește în română

Checking a symmetric array

Original: Verificarea unui vector simetric

O(n)C++1753 lines2 examples

The idea

An array is symmetric (a palindrome) if v[i] = v[n - i + 1] for every i. We compare the pairs from both ends towards the middle and stop at the first pair that differs.

Original description (Romanian)

Un vector este simetric (palindrom) dacă v[i] = v[n - i + 1] pentru orice i. Comparăm perechile de la capete spre mijloc și ne oprim la prima pereche diferită.

Complexity
O(n)
Grade
Grade 9 (Clasa a IX-a)

Examples

Example 1

Input

5
1 2 3 2 1

Expected output

DA
Example 2

Input

4
1 2 3 1

Expected output

NU

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

vector-simetric.cpp
/*
 * Titlu: Verificarea unui vector simetric
 * Clasa: 9
 * Capitol: Tablouri unidimensionale (vectori)
 * Descriere: Un vector este simetric (palindrom) dacă v[i] = v[n - i + 1]
 *            pentru orice i. Comparăm perechile de la capete spre mijloc și ne
 *            oprim la prima pereche diferită.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 5
 * 1 2 3 2 1
 * Ieșire: DA
 *
 * Exemplu
 * Intrare:
 * 4
 * 1 2 3 1
 * Ieșire: NU
 */
#include <iostream>
using namespace std;

int v[1001];

int main()
{
    int n;
    bool simetric = true;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }
    for (int i = 1; i <= n / 2 && simetric; i++)
    {
        if (v[i] != v[n - i + 1])
        {
            simetric = false;
        }
    }
    if (simetric)
    {
        cout << "DA" << '\n';
    }
    else
    {
        cout << "NU" << '\n';
    }
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.