मान लीजिए कि हमारे पास एन पूर्णांक के साथ एक सरणी गिरफ्तार है, हमें सरणी से एआर [i] और एआर [जे] ढूंढना होगा जैसे कि एआर [i] कैर [जे] जितना संभव हो सके। यदि एक से अधिक जोड़े हैं, तो उनमें से किसी एक को लौटा दें।
इसलिए, यदि इनपुट [4, 1, 2] जैसा है, तो आउटपुट 4 2 होगा जैसे 4सी1 =4, 4सी2 =6 और 2सी1 =2, इसलिए (4,2) केवल जोड़ी है जैसा हम चाहते हैं।पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- सूची को क्रमबद्ध करें v
- N :=v[n - 1]
- यदि N mod 2 1 के समान है, तो
- पहला :=N/2 (पूर्णांक विभाजन)
- दूसरा:=पहला + 1
- बाएं:=-1, दाएं:=-1
- अस्थायी:=-1
- मैं के लिए 0 से n की सीमा में, करते हैं
- अगर v[i]> पहले, फिर
- अस्थायी:=मैं
- ब्रेक
- अन्यथा,
- अंतर:=पहला - v[i]
- यदि अंतर
- res1 :=अंतर
- बाएं:=v[i]
- अगर v[i]> पहले, फिर
- दाएं:=वी[अस्थायी]
- difference1 :=पहले - बाएं
- difference2 :=दाएँ - सेकंड
- यदि अंतर1 <अंतर2, तो
- प्रिंट (एन, लेफ्ट)
- अन्यथा,
- प्रिंट (एन, दाएं)
- अधिकतम:=N/2 (पूर्णांक विभाजन)
- res :=3*(10^18)
- आर:=-1
- मैं के लिए 0 से n -1 की सीमा में, करो
- अंतर:=|v[i] - अधिकतम|
- यदि अंतर
- res :=अंतर
- R :=v[i]
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def findMatrixPair(v, n): v.sort() N = v[n - 1] if N % 2 == 1: first = N // 2 second = first + 1 res1, res2 = 3 * (10 ** 18), 3 * (10 ** 18) left, right = -1, -1 temp = -1 for i in range(0, n): if v[i] > first: temp = i break else: difference = first - v[i] if difference < res1: res1 = difference left = v[i] right = v[temp] difference1 = first - left difference2 = right - second if difference1 < difference2: print(N, left) else: print(N, right) else: max = N // 2 res = 3 * (10 ** 18) R = -1 for i in range(0, n - 1): difference = abs(v[i] - max) if difference < res: res = difference R = v[i] print(N, R) v = [4,1,2] n = len(v) findMatrixPair(v, n)
इनपुट
[4,1,2], 3
आउटपुट:
4 2