मान लीजिए, हमें 'टेस्टअरे' नामक एक वर्ग दिया गया है जिसमें एक निजी सरणी है जिसमें केवल 0 या 1 मान हो सकते हैं; और दो सार्वजनिक सदस्य कार्य लंबाई () और क्वेरी ()। फ़ंक्शन लंबाई () सरणी की लंबाई देता है और फ़ंक्शन क्वेरी () सरणी में विभिन्न मानों की तुलना करते हुए तीन अलग-अलग मान देता है। फ़ंक्शन इनपुट के रूप में चार मान p, q, r, s लेता है और इस तरह काम करता है -
-
यदि सरणी के दिए गए अनुक्रमणिका में सभी चार मान 0 या 1 हैं, तो यह 4 लौटाता है।
-
अन्यथा यदि सरणी के दिए गए अनुक्रमणिका में कोई तीन मान समान हैं और चौथा मान भिन्न है, तो यह 2 लौटाता है।
-
अन्यथा यदि सरणी के दिए गए अनुक्रमणिका में दो मान 0 और दो मान 1 हैं, तो यह 0 देता है।
हमें उस तत्व की अनुक्रमणिका का पता लगाना है जो सरणी में सबसे अधिक बार-बार होता है, बिना सरणी तक पहुंच के और केवल कक्षा के सदस्य कार्यों का उपयोग किए बिना। यदि सरणी में 0 और 1 की समान संख्या है, तो यह मान -1 देता है।
इसलिए, यदि इनपुट सरणी =[0, 1, 1, 0, 1, 1, 1, 0] की तरह है, तो आउटपुट 2 होगा सरणी के सूचकांक 2 में, मान 1 है जो सबसे अधिक बार-बार होता है सरणी में मान। इसी तरह, उत्तर 1, 4, 5, 6 भी सत्य हैं क्योंकि अनुक्रमणिका में भी 1 का मान होता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n:=लंबाई ()
-
ग्रुपए:=1
-
ग्रुपबी:=0
-
aIdx:=शून्य
-
bIdx:=शून्य
-
पहला:=:=क्वेरी(0, 1, 2, 3)
-
दूसरा:=क्वेरी (0, 1, 2, 4)
-
मैं के लिए 4 से n की सीमा में, करें
-
यदि क्वेरी (0, 1, 2, i) पहले जैसी ही है, तो
-
ग्रुपए:=ग्रुपए+1
-
aIdx :=मैं
-
-
अन्यथा,
-
ग्रुपबी:=ग्रुपबी+1
-
बीआईडीएक्स:=मैं
-
-
-
मेरे लिए 0 से 2 की सीमा में, करें
-
अगला:=नई सूची
-
1 से 4 की श्रेणी में v के लिए, करें
-
अगर v मेरे जैसा नहीं है, तो
-
nxt के अंत में v जोड़ें
-
-
-
यदि क्वेरी (nxt का मान) दूसरे के समान है, तो
-
ग्रुपए:=ग्रुपए + 1
-
aIdx :=मैं
-
-
अन्यथा,
-
ग्रुपबी:=ग्रुपबी+1
-
बीआईडीएक्स:=मैं
-
-
-
अगर ग्रुपए>ग्रुपबी, तो
-
वापसी aIdx
-
-
अन्यथा, अगर ग्रुपबी>ग्रुपए, तो
-
वापसी aIdx
-
-
अन्यथा,
-
वापसी -1
-
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class TestArray: def __init__(self, array) -> None: self.__arr = array def length(self): return len(self.__arr) def query(self, p, q, r, s): val = self.__arr[p] + self.__arr[q] + self.__arr[r] + self.__arr[s] if val == 4 or val == 0: return 4 elif val == 1 or val == 3: return 2 elif val == 2: return 0 def solve(reader): n,groupA,groupB,aIdx,bIdx=reader.length(),1,0,None,None first,second=reader.query(0,1,2,3),reader.query(0,1,2,4) for i in range(4,n): if reader.query(0,1,2,i)==first: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i for i in range(3): nxt=[v for v in [0,1,2,3,4] if v!=i] if reader.query(*nxt)==second: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i return aIdx if groupA>groupB else bIdx if groupB>groupA else -1 arr_ob = TestArray([0, 1, 1, 0, 1, 1, 1, 0]) print(solve(arr_ob))
इनपुट
[0, 1, 1, 0, 1, 1, 1, 0]
आउटपुट
2