मान लीजिए कि हमारे पास निम्नलिखित फ़ंक्शन परिभाषा है:
def modify(arr, op, index): if op == 0: arr[index] += 1 if op == 1: for i in range(len(arr)): arr[i] *=2
हमें किसी दिए गए सरणी संख्या को समान आकार के एक शून्य सरणी से बनाने के लिए आवश्यक न्यूनतम संख्या में फ़ंक्शन कॉल की आवश्यकता है?
इसलिए, यदि इनपुट nums =[1,5,3] जैसा है, तो आउटपुट 7 होगा, क्योंकि प्रारंभ में सभी तत्व 0, [0,0,0]
हैं।-
पहले चरण में दूसरे तत्व को 1 से बढ़ाएं, इसलिए सरणी [0,1,0]
. है -
इसे बनाने के लिए दुगना दूसरा तत्व [0,2,0]
-
तीसरे तत्व को 1 से बढ़ाएँ, इसलिए सरणी है [0,2,1]
-
इंडेक्स 1 से 2 तक डबल एलिमेंट, इसलिए ऐरे [0,4,2]
. है -
सभी तत्वों को 1 से बढ़ाएं [यहां कुल तीन ऑपरेशन]
इसलिए कुल 3+4 =7 ऑपरेशन आवश्यक हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर :=दो तत्वों वाली एक सरणी 0 है
-
अंकों में प्रत्येक n के लिए, करें
-
डबल:=0
-
जबकि n शून्य नहीं है, करें
-
अगर n विषम है, तो
-
n :=n/2 का भागफल
-
डबल:=डबल + 1
-
-
अन्यथा,
-
n :=n - 1
-
ans[0] :=ans[0] + 1
-
-
-
ans[1] :=अधिकतम उत्तर[1] और दुगना
-
-
उत्तर के सभी तत्वों का रिटर्न योग
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(nums): ans = [0, 0] for n in nums: double = 0 while(n): if not n%2: n = n//2 double+=1 else: n-=1 ans[0]+=1 ans[1] = max(ans[1], double) return sum(ans) nums = [1,5,3] print(solve(nums))
इनपुट
[1,5,3]
आउटपुट
7