nums라는 숫자 목록이 있다고 가정하고 그것이 maxheap을 나타내는지 확인해야 합니다. 우리는 다음 규칙을 따를 것입니다 -
- nums[i] =nums[2*i + 1] 2*i + 1이 범위 내에 있을 때
- nums[i] =nums[2*i + 2] 2*i + 2가 범위 내에 있을 때
따라서 입력이 [5, 3, 4, 1, 2]와 같으면 출력은 True
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 0 ~ (숫자 크기)/2 범위의 i에 대해
- nums[i]>=nums[2*i+1]이 true가 아니면
- 거짓을 반환
- i*2+2 <=(숫자의 크기)-1이면
- nums[i]>=nums[2*i+2]가 true가 아니면
- 거짓을 반환
- nums[i]>=nums[2*i+2]가 true가 아니면
- nums[i]>=nums[2*i+1]이 true가 아니면
- 참 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
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))
입력
[5, 3, 4, 1, 2]
출력
True