สมมติว่ามีทหาร n คนยืนเข้าแถว ที่นี่ทหารแต่ละคนจะได้รับค่าการจัดอันดับที่ไม่ซ้ำกัน เราต้องสร้างทีมทหาร 3 นายโดยใช้กฎต่อไปนี้ -
เลือกทหาร 3 นายที่มีดัชนี (i, j, k) ที่เรตติ้ง (เรตติ้ง[i], เรต[j], เรตติ้ง[k])
ทีมจะมีผลถ้า − (คะแนน[i] <เรตติ้ง[j] <เรตติ้ง[k]) หรือ (เรตติ้ง[i]> เรต[j]> เรต[k])
เราต้องหาจำนวนทีมที่เราสามารถสร้างได้ (ทหารสามารถเป็นส่วนหนึ่งของทีมได้หลายทีม)
ดังนั้นหากอินพุตเป็นเหมือนเรตติ้ง =[2,5,3,4,1] ผลลัพธ์จะเป็น 3 เนื่องจากเราสามารถสร้างสามทีมเช่น (2,3,4), (5,4,1) , (5,3,1).
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ret :=0, n :=ขนาดของ v
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
สำหรับการเริ่มต้น j :=i + 1 เมื่อ j
-
สำหรับการเริ่มต้น k :=j + 1 เมื่อ k
-
ถ้า v[i]
-
(เพิ่มการถอยกลับโดย 1)
-
-
มิฉะนั้นเมื่อ v[i]> v[j] และ v[j]> v[k] แล้ว −
-
(เพิ่มการถอยกลับโดย 1)
-
-
-
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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