C++ 統計團隊數量


假設有 n 個士兵站成一列。每個士兵都被分配了一個唯一的評級值。我們必須根據以下規則在他們中間組建一個 3 人團隊:

選擇 3 個士兵,索引為 (i, j, k),其評級為 (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 := v 的大小

  • for 初始化 i := 0,當 i < n 時,更新(i 增加 1),執行:

    • for 初始化 j := i + 1,當 j < n 時,更新(j 增加 1),執行:

      • for 初始化 k := j + 1,當 k < n 時,更新(k 增加 1),執行:

        • 如果 v[i] < v[j] 且 v[j] < v[k],則:

          • (ret 增加 1)

        • 否則,如果 v[i] > v[j] 且 v[j] > v[k],則:

          • (ret 增加 1)

  • 返回 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

更新於:2020年11月17日

282 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.