Suppose we have a list of numbers called nums, we have to check whether it represents a max heap. We will follow these rules −
- nums[i] = nums[2*i + 1] when 2*i + 1 is inside range
- nums[i] = nums[2*i + 2] when 2*i + 2 is inside range
So, if the input is like [5, 3, 4, 1, 2], then the output will be True
To solve this, we will follow these steps −
- for i in range 0 to (size of nums)/2, do
- if nums[i] >= nums[2*i+1] is not true, then
- return False
- if i*2+2 <= (size of nums)-1, then
- if nums[i] >= nums[2*i+2] is not true, then
- return False
- if nums[i] >= nums[2*i+2] is not true, then
- if nums[i] >= nums[2*i+1] is not true, then
- return True
Let us see the following implementation to get better understanding −
Example
class Solution: def solve(self, nums): for i in range(len(nums)//2): if not nums[i] >= nums[2*i+1]: return False if i*2+2 <= len(nums)-1: if not nums[i] >= nums[2*i+2]: return False return True ob = Solution() nums = [5, 3, 4, 1, 2] print(ob.solve(nums))
Input
[5, 3, 4, 1, 2]
Output
True