मान लीजिए n सैनिक एक पंक्ति में खड़े हैं। प्रत्येक सैनिक को एक अद्वितीय रेटिंग मान दिया गया है। हमें उनमें से 3 सैनिकों की एक टीम बनानी है, निम्न नियमों के अनुसार:
इंडेक्स (i, j, k) वाले 3 सैनिक चुनें जैसे कि रेटिंग (rating[i], rating[j], rating[k]) हो।
एक टीम वैध होगी यदि (rating[i] < rating[j] < rating[k]) या (rating[i] > rating[j] > rating[k]) हो।
हमें उन टीमों की संख्या ज्ञात करनी है जिन्हें हम बना सकते हैं। (सैनिक कई टीमों का हिस्सा हो सकते हैं)।
उदाहरण के लिए, यदि इनपुट rating = [2,5,3,4,1] है, तो आउटपुट 3 होगा, क्योंकि हम (2,3,4), (5,4,1), (5,3,1) जैसी तीन टीमें बना सकते हैं।
हल करने की विधि
हम निम्न चरणों का पालन करेंगे:
- ret = 0, n = सरणी का आकार।
- तीन नेस्टेड लूप चलाएं i, j, k के लिए जहां i < j < k।
- यदि v[i] < v[j] और v[j] < v[k] हो, या v[i] > v[j] और v[j] > v[k] हो, तो ret बढ़ाएं।
- ret लौटाएं।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; class Solution { public: int numTeams(vector<int>& v) { int ret = 0; int n = v.size(); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { if (v[i] < v[j] && v[j] < v[k]) ret++; else if (v[i] > v[j] && v[j] > v[k]) ret++; } } } return ret; } }; main(){ Solution ob; vector<int> v = {2,5,3,4,1}; cout << (ob.numTeams(v)); }
इनपुट
{2,5,3,4,1}
आउटपुट
3