ধরুন আমাদের n পূর্ণসংখ্যা সহ একটি অ্যারে অ্যারে আছে, আমাদের অ্যারে থেকে arr[i] এবং arr[j] খুঁজে বের করতে হবে যাতে arr[i]Carr[j] যতটা সম্ভব বড় হয়। যদি একাধিক জোড়া থাকে, তাদের যেকোনো একটি ফেরত দিন।
সুতরাং, যদি ইনপুটটি [4, 1, 2] এর মত হয়, তাহলে আউটপুট হবে 4 2 হিসাবে 4C1 =4, 4C2 =6 এবং 2C1 =2, তাই (4,2) শুধুমাত্র আমরা যেভাবে চাই তা জোড়া। পি>
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- তালিকা সাজান v
- N :=v[n - 1]
- যদি N mod 2 1 এর মত হয়, তাহলে
- প্রথম :=N / 2 (পূর্ণসংখ্যা বিভাগ)
- সেকেন্ড :=প্রথম + 1
- বামে :=-1, ডানে :=-1
- তাপ :=-1
- আমি 0 থেকে n রেঞ্জের জন্য, কর
- যদি v[i]> প্রথমে, তারপর
- তাপ :=i
- ব্রেক
- অন্যথায়,
- পার্থক্য :=প্রথম - v[i]
- যদি পার্থক্য
- res1 :=পার্থক্য
- বামে :=v[i]
- যদি v[i]> প্রথমে, তারপর
- ডান :=v[temp]
- পার্থক্য1 :=প্রথম - বাম
- পার্থক্য2 :=ডান - সেকেন্ড
- যদি পার্থক্য1 <পার্থক্য2, তাহলে
- মুদ্রণ (N, বাম)
- অন্যথায়,
- মুদ্রণ (N, ডান)
- সর্বোচ্চ :=N / 2 (পূর্ণসংখ্যা বিভাগ)
- res :=3*(10^18)
- R :=-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