고유한 값 목록이 있고 각 숫자를 내림차순으로 제거하려고 한다고 가정합니다. 삭제된 순서대로 숫자의 인덱스를 찾아야 합니다.
따라서 입력이 nums =[4, 6, 2, 5, 3, 1]과 같으면 1을 삭제하면 출력은 [5, 2, 3, 0, 1, 0]이 되므로 배열은 [ 4, 6, 2, 5, 3], 그런 다음 2를 제거하고 배열은 [4, 6, 5, 3]이고 3을 제거하면 [4, 6, 5]가 되고 4를 제거하면 [6, 5]가 됩니다. , 5, [6]을 제거하고 마지막으로 6을 제거합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- my_sort() 함수를 정의합니다. 시간이 걸립니다
- inds의 크기가 <=1이면
- 반품
- sorted_inds :=새 목록
- mid :=inds의 크기 / 2
- 왼쪽 :=my_sort(inds[인덱스 0에서 중간까지]), 오른쪽 :=my_sort(inds[인덱스 중간에서 끝까지])
- i :=0, j :=0
- i <왼쪽의 크기, j <오른쪽의 크기, do
- 숫자[왼쪽[i]] <숫자[오른쪽[j]]이면
- sorted_inds 끝에 왼쪽[i] 삽입
- 나는 :=나는 + 1
- 그렇지 않으면
- sorted_inds 끝에 오른쪽 삽입[j]
- 크게[오른쪽[j]] 더 크게[오른쪽[j]] + 왼쪽 크기 - i
- j :=j + 1
- 숫자[왼쪽[i]] <숫자[오른쪽[j]]이면
- 왼쪽[색인 i에서 끝까지]을 sorted_inds에 삽입
- sorted_inds에 오른쪽[인덱스 j에서 끝까지] 삽입
- sorted_inds 반환
- 메인 방법에서 다음을 수행하십시오 -
- larger :=크기 숫자의 새 목록 및 0으로 채우기
- my_sort(범위 0에서 숫자 크기까지)
- num_larger_pairs :=각각에 대해 쌍을 만들고(숫자, 더 크게) 정렬
- num_larger_pairs의 모든 e에 대해 e[1]이 있는 목록을 반환
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class 솔루션:def solve(self, nums):return solve(nums)def solve(nums):def my_sort(inds):if len(inds) <=1:return inds sorted_inds =[] mid =len( inds) // 2 left, right =my_sort(inds[:mid]), my_sort(inds[mid:]) i =j =0 while i입력
[4, 6, 2, 5, 3, 1]출력
[5, 2, 3, 0, 1, 0]