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
廣告