একটি nums অ্যারে দেওয়া আছে যেটিতে জোড় সংখ্যক উপাদান রয়েছে, এবং একটি k মান। আমাদের কাজ হলো nums-কে ঠিক n/2টি জোড়ায় ভাগ করা যাতে প্রতিটি জোড়ার যোগফল k দিয়ে বিভাজ্য হয়। সম্ভব হলে true, অসম্ভব হলে false ফেরত দিন।
যেমন, nums = [9,5,3,4,7,10,20,8], k = 3 হলে আউটপুট True। কারণ জোড়াগুলো: (9,3), (5,7), (4,20), (8,10) - সবার যোগফল ৩ দিয়ে বিভাজ্য।
সমাধানের ধাপসমূহ
- dp := একটি খালি লিস্ট
- count := 0
- nums-এর প্রতিটি x এর জন্য:
- t := k - (x mod k)
- যদি t == k হয়, তবে count := count + 1
- অন্যথায়, dp-তে t যোগ করুন।
- যদি count % 2 != 0 হয়, তবে false ফেরত দিন।
- dp সর্ট করুন।
- low := 0, high := dp-এর আকার - 1
- যখন low < high:
- যদি dp[low] + dp[high] != k হয়, তবে false ফেরত দিন।
- low := low + 1, high := high - 1
- true ফেরত দিন।
উদাহরণ
def solve(nums, k):
dp = []
count = 0
for x in nums:
t = k - (x % k)
if t == k:
count += 1
else:
dp.append(t)
if count % 2 != 0:
return False
dp.sort()
low = 0
high = len(dp) - 1
while low < high:
if dp[low] + dp[high] != k:
return False
low += 1
high -= 1
return True
nums = [9,5,3,4,7,10,20,8]
k = 3
print(solve(nums, k))
ইনপুট
[9,5,3,4,7,10,20,8], 3
আউটপুট
True