একটি লিস্ট হিপ ট্রি রিপ্রেজেন্ট করে (কমপ্লিট বাইনারি ট্রি)। প্রতিটি নোড তার দুটি চাইল্ড থেকে বড় কিনা চেক করে ম্যাক্স হিপ ভ্যালিডেশন করুন।
ইনপুট উদাহরণ
nums = [8, 6, 4, 2, 0, 3]
আউটপুট: True
অ্যালগরিদম
অ্যারে রিপ্রেজেন্টেশনে পেরেন্ট i-এর চাইল্ড: 2*i+1 এবং 2*i+2। সব পেরেন্টের জন্য চেক করুন nums[i] >= nums[left] এবং nums[i] >= nums[right]।
পাইথন কোড
def solve(nums):
n = len(nums)
for i in range(n):
m = i * 2
num = nums[i]
if m + 1 < n:
if num < nums[m + 1]:
return False
if m + 2 < n:
if num < nums[m + 2]:
return False
return True
# টেস্ট
print(solve([8, 6, 4, 2, 0, 3])) # True
ব্যাখ্যা
নোট: কোডে m = i*2 ব্যবহার করা হয়েছে, কিন্তু স্ট্যান্ডার্ড হিপে 2*i+1। এই কোড ১-বেসড ইন্ডেক্সিং ধরে বা বাগ আছে। সঠিক কোড:
def solve(nums):
n = len(nums)
for i in range(n):
left = 2*i + 1
right = 2*i + 2
if left < n and nums[i] < nums[left]:
return False
if right < n and nums[i] < nums[right]:
return False
return True