मान लीजिए, हमें 'टेस्टअरे' नामक एक वर्ग दिया गया है जिसमें एक सरणी है जो अन्य वर्गों और दो सार्वजनिक सदस्य कार्यों की लंबाई () और तुलना () द्वारा सुलभ नहीं है। फ़ंक्शन लंबाई () सरणी की लंबाई देता है और फ़ंक्शन तुलना () सरणी से विभिन्न उप-सरणी की तुलना करते हुए तीन अलग-अलग मान देता है। फ़ंक्शन इनपुट के रूप में चार मान l, r, x, y लेता है और इस तरह काम करता है -
-
अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर])> (सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह 1 लौटाता है
-
अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर]) =(सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह 0 लौटाता है
-
अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर]) <(सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह -1 लौटाता है
हमें एरे में अधिकतम एलीमेंट के इंडेक्स को बिना ऐरे को एक्सेस किए और केवल क्लास के मेंबर फंक्शन्स का उपयोग करके खोजना होगा।
इसलिए, यदि इनपुट सरणी की तरह है =[8, 4, 2, 12, 11, 8, 4, 2, 7], तो आउटपुट 3 होगा। सरणी में सबसे बड़ा तत्व 12 है और यह सूचकांक पर स्थित है 3.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n:=लंबाई ()
-
कम:=0
-
उच्च :=n - 1
-
जबकि कम <उच्च, करें
-
मध्य :=(निम्न+उच्च+1) / 2
. का न्यूनतम मान -
अगर (लो+हाई+1) मॉड 2, 0 के समान है, तो
-
रेस:=तुलना करें (निम्न, मध्य-1, मध्य, उच्च)
-
अगर रेस 1 के समान है, तो
-
उच्च :=मध्य -1
-
-
अन्यथा,
-
कम :=मध्य
-
-
-
अन्यथा,
-
रेस :=तुलना करें (निम्न, मध्य-1, मध्य+1, उच्च)
-
अगर रेस 1 के समान है, तो
-
उच्च :=मध्य -1
-
-
अन्यथा जब रेस -1 के समान हो, तब
-
निम्न :=मध्य -1
-
-
अन्यथा,
-
बीच में लौटें
-
-
-
यदि उच्च निम्न के समान है, तो
-
उच्च वापसी
-
-
-
वापसी -1
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class TestArray: def __init__(self, array) -> None: self.__arr = array def length(self): return len(self.__arr) def compare(self, l, r, x, y): val1 = sum(i for i in self.__arr[l:r+1]) val2 = sum(j for j in self.__arr[x:y+1]) if val1 > val2: return 1 elif val1 == val2: return 0 elif val1 < val2: return -1 def solve(reader): n = reader.length() low,high = 0,n - 1 while low < high: mid = (low+high+1)//2 if (low+high+1)%2 == 0: res = reader.compare(low,mid-1,mid,high) if res == 1:high = mid - 1 else:low = mid else: res = reader.compare(low,mid-1,mid+1,high) if res == 1:high = mid - 1 elif res == -1:low = mid + 1 else: return mid if high == low: return high return -1 arr_ob = TestArray([8, 4, 2, 12, 11, 8, 4, 2, 7]) print(solve(arr_ob))
इनपुट
[8, 4, 2, 12, 11, 8, 4, 2, 7]
आउटपुट
3