C++程式碼:統計除以某個數後大於陣列大小一半的數字個數


假設我們有一個包含n個元素的陣列A。我們必須找到一個非零整數d,使得在陣列中的每個數字都除以d之後,陣列中出現的正數值的數量大於或等於陣列大小的一半。如果有多個d值滿足條件,則返回其中任何一個。

因此,如果輸入類似於A = [10, 0, -7, 2, 6],則輸出將為4,因為這裡n = 5,所以我們需要至少$\mathrm{\left \lceil 5/2\right \rceil=3}$個除法後的正數元素。如果d = 4,則除法後的陣列將為[2.5, 0, −1.75, 0.5, 1.5],其中有3個正數:2.5、0.5和1.5。

步驟

為了解決這個問題,我們將遵循以下步驟:

z := 0, f := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   a := A[i]
   if a > 0, then:
      (increase z by 1)
   if a < 0, then:
      (increase f by 1)
if 2 * z >= n, then:
      return 1
otherwise when 2 * f >= n, then:
   return -1
Otherwise
   return 0

示例

讓我們來看下面的實現,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int z = 0, f = 0;
   int n = A.size();
   for (int i = 0; i < n; i++){
      int a = A[i];
      if (a > 0)
         z++;
      if (a < 0)
         f++;
   }
   if (2 * z >= n)
      return 1;
   else if (2 * f >= n)
      return -1;
   else
      return 0;
}
int main(){
   vector<int> A = { 10, 0, -7, 2, 6 };
   cout << solve(A) << endl;
}

輸入

{ 10, 0, -7, 2, 6 }

輸出

1

更新於:2022年3月29日

瀏覽量:112

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告