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

Python에서 중앙값이 M이 되도록 처음 N개의 자연수의 순열에서 하위 배열의 수를 찾습니다.


처음 N개의 자연수의 순열을 포함하는 배열 A가 있고 M ≤ N인 다른 숫자 M도 주어진다고 가정하면 다음과 같은 하위 배열의 수를 찾아야 합니다. 시퀀스의 중앙값은 M입니다. 시퀀스의 중앙값은 우리가 알다시피 오름차순으로 정렬한 후 시퀀스의 중간에 있는 요소의 값으로 정의됩니다. 짝수 길이 시퀀스의 경우 두 개의 중간 요소의 왼쪽이 사용됩니다.

따라서 입력이 A =[3, 5, 6, 4, 2] 및 M =5와 같으면 필요한 하위 배열이 [3, 5, 6], [5], [5이므로 출력은 4가 됩니다. , 6] 및 [5, 6, 4].

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=arr의 크기

  • my_map :=새 지도

  • my_map[0] :=1

  • has :=False, 추가 :=0, 결과 :=0

  • 0에서 n 사이의 i에 대해 수행

    • arr[i]

      • 추가 :=추가 - 1

    • 그렇지 않으면 arr[i]> m일 때

      • 추가 :=추가 + 1

    • arr[i]가 m과 같으면

      • 가 있음 :=참

    • has가 참이면

      • my_map에 현재를 추가하면

        • 결과 :=결과 + my_map[추가]

      • my_map에 add-1이 있으면

        • 결과 :=결과 + my_map[추가 - 1]

    • 그렇지 않으면

      • my_map[add] :=(my_map[add]의 값, 존재하는 경우, 그렇지 않으면 0) + 1

  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(arr, m):
   n = len(arr)
   my_map = {}
   my_map[0] = 1
   has = False
   add = 0
   result = 0
   for i in range(n):
      if (arr[i] < m):
         add -= 1
      elif (arr[i] > m):
         add += 1
      if (arr[i] == m):
         has = True
      if (has):
         if(add in my_map):
            result += my_map[add]
         if add-1 in my_map:
            result += my_map[add - 1]
      else:
         my_map[add] = my_map.get(add, 0) + 1
   return result
arr = [3, 5, 6, 4, 2]
m = 5
print(solve(arr, m))

입력

[3, 5, 6, 4, 2] , 5

출력

3