একটি এসেন্ডিং সর্টেড লিস্ট nums দেওয়া আছে। প্রতিটি উপাদান বর্গ করে ফলাফল সর্টেড অর্ডারে রিটার্ন করুন।
ইনপুট উদাহরণ
nums = [-8, -3, 0, 5, 6]
আউটপুট: [0, 9, 25, 36, 64]
অ্যালগরিদম (Two Pointers)
- দুই পয়েন্টার:
l=0(শুরু),r=n-1(শেষ)। - রেজাল্ট অ্যারে
resপिछন থেকে ভরান (index = n-1)। - যদি
|nums[l]| > |nums[r]|:res[index] = nums[l]²,l++। - অন্যথায়:
res[index] = nums[r]²,r--। index--।
পাইথন কোড
def solve(nums):
n = len(nums)
l = 0
r = n - 1
index = n - 1
res = [0] * n
while index >= 0:
if abs(nums[l]) > abs(nums[r]):
res[index] = nums[l] * nums[l]
l += 1
else:
res[index] = nums[r] * nums[r]
r -= 1
index -= 1
return res
# টেস্ট
print(solve([-8, -3, 0, 5, 6])) # [0, 9, 25, 36, 64]
ব্যাখ্যা
নেগেটিভ নম্বর বর্গ করলে বড় হয়। দুই পয়েন্টার দিয়ে বড় বর্গগুলো পिछন থেকে রাখলে সর্টেড রেজাল্ট পাওয়া যায়। সময় O(n), স্পেস O(n)।