Count Number of Teams

There are n soldiers standing in a line. Each soldier is assigned a unique rating value.

You have to form a team of 3 soldiers amongst them under the following rules:

  • Choose 3 soldiers with index (ijk) with rating (rating[i]rating[j]rating[k]).
  • A team is valid if: (rating[i] < rating[j] < rating[k]) or (rating[i] > rating[j] > rating[k]) where (0 <= i < j < k < n).

Return the number of teams you can form given the conditions. (soldiers can be part of multiple teams).

Example :

Input: rating = [2,5,3,4,1]
Output: 3
Explanation: We can form three teams given the conditions. (2,3,4), (5,4,1), (5,3,1). 

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

int numTeams(vector<int&rating)
{
    int N = rating.size();
    vector<intlarge(N0);
    vector<intsmall(N0);

    for (int i = 0i < N - 1i++)
    {
        for (int j = i + 1j < Nj++)
        {
            if (rating[i] > rating[j])
                large[i]++;
            else
                small[i]++;
        }
    }

    int team = 0;

    for (int i = 0i < N - 2i++)
    {
        for (int j = i + 1j < N - 1j++)
        {
            if (rating[i] > rating[j])
                team += large[j];
            else
                team += small[j];
        }
    }

    return team;
}
int main()
{
    vector<intrating = {25341};

    cout << numTeams(rating);

    return 0;
}


No comments:

Post a Comment