একটি নম্বর লিস্ট nums এবং টার্গেট ভ্যালু দেওয়া আছে। target-1 বা তার চেয়ে ছোট সবচেয়ে বড় জোড়া যোগফল বের করুন।
ইনপুট উদাহরণ
nums = [8, 3, 4, 9, 2]
target = 8
আউটপুট: 7 (4+3=7, যা ৮-এর চেয়ে ছোট সবচেয়ে বড় যোগফল)
অ্যালগরিদম
- লিস্ট সর্ট করুন।
- টু-পয়েন্টার:
p1=0(শুরু),p2=n-1(শেষ)। - যদি
nums[p1]+nums[p2] < target: ম্যাক্স আপডেট করুন,p1++। - অন্যথায়:
p2--।
পাইথন কোড
import math
def solve(nums, target):
nums.sort()
p1 = 0
p2 = len(nums) - 1
m = -math.inf
while p1 < p2:
if nums[p1] + nums[p2] < target:
m = max(m, nums[p1] + nums[p2])
p1 += 1
else:
p2 -= 1
return m
# টেস্ট
print(solve([8, 3, 4, 9, 2], 8)) # 7
ব্যাখ্যা
সর্টেড অ্যারেতে টু-পয়েন্টার দিয়ে target-এর নিচে সবচেয়ে বড় যোগফল খুঁজে বের করা। সময় জটিলতা O(n log n) (সর্টিং)।