मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। हमें कुछ गैर-शून्य पूर्णांक d खोजना है, जैसे कि, सरणी में प्रत्येक संख्या को d से विभाजित करने के बाद, सरणी में प्रस्तुत किए गए सकारात्मक मानों की संख्या सरणी आकार के आधे से अधिक या उसके बराबर हो . यदि d के कई मान हैं जो शर्त को पूरा करते हैं। यदि एक से अधिक उत्तर हैं, तो उनमें से किसी एक को वापस करें।
इसलिए, यदि इनपुट ए =[10, 0, -7, 2, 6] जैसा है, तो आउटपुट 4 होगा, क्योंकि यहाँ n =5 है, इसलिए हमें कम से कम $\mathrm{\left \lceil 5/ की आवश्यकता है। विभाजन के बाद 2\दाएं \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