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 (
i
,j
,k
) 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<int> large(N, 0);vector<int> small(N, 0);for (int i = 0; i < N - 1; i++){for (int j = i + 1; j < N; j++){if (rating[i] > rating[j])large[i]++;elsesmall[i]++;}}int team = 0;for (int i = 0; i < N - 2; i++){for (int j = i + 1; j < N - 1; j++){if (rating[i] > rating[j])team += large[j];elseteam += small[j];}}return team;}int main(){vector<int> rating = {2, 5, 3, 4, 1};cout << numTeams(rating);return 0;}
No comments:
Post a Comment