nums라는 숫자 목록이 있다고 가정하고 새 목록의 각 요소가 원래 입력 목록의 해당 요소 오른쪽에 있는 더 작은 요소의 수인 새 목록을 생성합니다.
따라서 입력이 nums =[4, 5, 9, 7, 2]와 같으면 출력은 [1, 1, 2, 1, 0]이 됩니다. 4의 오른쪽에 1개의 더 작은 요소가 있기 때문입니다. 5의 오른쪽에 1개의 작은 요소, 9의 오른쪽에 2개의 작은 요소, 7의 오른쪽에 1개의 작은 요소, 2의 오른쪽에 더 작은 요소가 없습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
res :=새 목록, inc :=새 목록
-
nums가 비어 있지 않은 동안 수행
-
num :=num에서 마지막 요소 삭제
-
res의 끝에 inc에 num을 삽입하려면 가장 왼쪽에 있는 인덱스를 삽입하십시오.
-
inc에 num을 삽입한 후 정렬된 목록
-
-
목록 res[인덱스 0에서 끝까지]
반환
더 나은 이해를 위해 다음 구현을 살펴보겠습니다-
예
import bisect class Solution: def solve(self, nums): res, inc = [], [] while nums: num = nums.pop() res.append(bisect.bisect_left(inc, num)) bisect.insort(inc, num) return res[::-1] ob = Solution() nums = [4, 5, 9, 7, 2] print(ob.solve(nums))
입력
[4, 5, 9, 7, 2]
출력
[1, 1, 2, 1, 0]