ধরুন আমাদের দুটি অ্যারে আছে P এবং Q যার আকার N, তারা 1 থেকে N পর্যন্ত সংখ্যা ধারণ করছে। আমাদের প্রদত্ত অ্যারে থেকে সাব-অ্যারে খুঁজে বের করতে হবে যাতে তাদের সমান যোগফল থাকে। অবশেষে এই ধরনের সাব-অ্যারেগুলির সূচকগুলি ফেরত দিন। যদি কোন সমাধান না হয়, তাহলে -1 রিটার্ন করুন।
সুতরাং, যদি ইনপুট হয় P =[2, 3, 4, 5, 6], Q =[9, 3, 2, 6, 5], তাহলে আউটপুটটি প্রথমে সূচক হবে অ্যারে:0, 1, 2 এবং দ্বিতীয় অ্যারেতে সূচকগুলি:0, তাই P[0..2] =2 + 3 + 4 =9 এবং Q[0] =9।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন get_subarray() সংজ্ঞায়িত করুন। এটি P, Q, swap
নেবে -
N :=P
এর আকার -
index :=একটি নতুন মানচিত্র
-
পার্থক্য :=0, j :=0
-
index[0] :=একটি জোড়ার মত (-1, -1)
-
i 0 থেকে N রেঞ্জের জন্য, করুন
-
যখন Q[j]
-
j :=j + 1
-
-
পার্থক্য :=Q[j] - P[i]
-
যদি সূচকে পার্থক্য থাকে, তাহলে
-
যদি swap ture হয়, তাহলে
-
idx :=index[Q[j] - P[i]]
-
P
এর জন্য idx[1] + 1 থেকে j পর্যন্ত সমস্ত মান প্রদর্শন করুন -
Q
এর জন্য idx[0] + 1 থেকে i পর্যন্ত সমস্ত মান প্রদর্শন করুন
-
-
অন্যথায়,
-
idx :=index[Q[j] - P[i]]
-
P
এর জন্য idx[0] + 1 থেকে i পর্যন্ত সমস্ত মান প্রদর্শন করুন -
Q
এর জন্য idx[1] + 1 থেকে j পর্যন্ত সমস্ত মান প্রদর্শন করুন
-
-
ফেরত
-
-
সূচক [পার্থক্য] :=(i, j)
-
-
প্রদর্শন -1
-
মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
P এবং Q তাদের ক্রমবর্ধমান যোগফল
ব্যবহার করে আপডেট করুন -
N :=P
এর আকার -
যদি Q[N - 1]> P[N - 1], তাহলে
-
get_subarray(P, Q, False)
-
-
অন্যথায়,
-
get_subarray(Q, P, True)
-
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def show_res(x, y, num):
print("Indices of array", num, ":", end = " ")
for i in range(x, y):
print(i, end = ", ")
print(y)
def get_subarray(P, Q, swap):
N = len(P)
index = {}
difference, j = 0, 0
index[0] = (-1, -1)
for i in range(0, N):
while Q[j] < P[i]:
j += 1
difference = Q[j] - P[i]
if difference in index:
if swap:
idx = index[Q[j] - P[i]]
show_res(idx[1] + 1, j, 1)
show_res(idx[0] + 1, i, 2)
else:
idx = index[Q[j] - P[i]]
show_res(idx[0] + 1, i, 1)
show_res(idx[1] + 1, j, 2)
return
index[difference] = (i, j)
print(-1)
def cumsum(arr):
n = len(arr)
for i in range(1, n):
arr[i] += arr[i - 1]
P = [2, 3, 4, 5, 6]
Q = [9, 3, 2, 6, 5]
cumsum(P)
cumsum(Q)
N = len(P)
if Q[N - 1] > P[N - 1]:
get_subarray(P, Q, False)
else:
get_subarray(Q, P, True) ইনপুট
[2, 3, 4, 5, 6],[9, 3, 2, 6, 5]
আউটপুট
Indices of array 1 : 0, 1, 2 Indices of array 2 : 0