Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 주어진 목록의 오른쪽에 더 작은 요소의 수를 반환하는 프로그램

<시간/>

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]