Menu
CoddyTech

Count Inversions

보통정렬재귀python iconjava iconcpp iconc iconjs icon+10

정수 목록 nums가 주어졌을 때, 역전의 개수를 반환하세요. 역전은 i < j이고 nums[i] > nums[j]인 인덱스 쌍으로, 더 큰 값이 더 작은 값보다 앞에 있는 경우입니다. 같은 값끼리는 역전을 이루지 않으며, 정렬된 목록에는 역전이 없습니다.

함수

countInversions(nums: integer-array) → integer
numsinteger-array
정수 목록
반환값integer
nums[i] > nums[j]인 i < j 쌍의 개수

제약 조건

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • 답은 최대 n(n-1)/2 < 2 × 108이므로 부호 있는 32비트 정수에 들어갑니다.

예제

입력
nums = [5, 3, 8, 1, 4]
출력
6
설명
5는 3, 1, 4보다 앞에 있습니다: 3쌍입니다. 3은 1보다 앞에 있고, 8은 1과 4보다 앞에 있습니다: 3쌍이 더 있습니다. 1과 4는 순서가 맞으므로 합계는 6입니다.
challenge icon

후속 질문

nums[i] > 2 × nums[j]일 때만 쌍으로 세면 무엇이 달라질까요? 병합 정렬로 여전히 O(n log n)에 이러한 쌍을 셀 수 있을까요?

코드 초기화
def countInversions(nums):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자

nums = [5, 3, 8, 1, 4]

예상 출력

6