मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। एक ऑपरेशन में, हम ए में किसी एक तत्व प्रीसेट के साथ 1 जोड़ सकते हैं। यदि सरणी में सभी तत्वों का योग या उत्पाद शून्य के बराबर है, तो हम इस ऑपरेशन को एक बार और कर सकते हैं। हमें सरणी में सभी तत्वों के योग और गुणनफल दोनों को शून्य से अलग बनाने के लिए आवश्यक न्यूनतम चरणों की संख्या गिननी होगी?
इसलिए, यदि इनपुट ए =[-1, 0, 0, 1] जैसा है, तो आउटपुट 2 होगा, क्योंकि उत्पाद और योग दोनों 0 हैं। यदि हम दूसरे और तीसरे तत्व में 1 जोड़ते हैं, तो सरणी होगी हो [−1,1,1,1], योग 2 के बराबर होगा और गुणनफल -1 के बराबर होगा।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
sum := 0 cnt := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: x := A[i] sum := sum + x cnt := cnt + (if x is same as 0, then 1, otherwise 0) return (if sum + cnt is same as 0, then cnt + 1, otherwise cnt)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A) { int sum = 0, cnt = 0; int n = A.size(); for (int i = 0; i < n; i++) { int x = A[i]; sum += x; cnt += x == 0 ? 1 : 0; } return sum + cnt == 0 ? cnt + 1 : cnt; } int main() { vector<int> A = { -1, 0, 0, 1 }; cout << solve(A) << endl; }
इनपुट
{ -1, 0, 0, 1 }
आउटपुट
2