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

Python에서 오름차순으로 요소를 삭제한 후 목록의 인덱스를 가져오는 프로그램

<시간/>

고유한 값 목록이 있고 각 숫자를 내림차순으로 제거하려고 한다고 가정합니다. 삭제된 순서대로 숫자의 인덱스를 찾아야 합니다.

따라서 입력이 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에서 끝까지]을 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]