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

Python에서 세 가지 다른 정렬된 배열의 최소화(max(A[i], B[j], C[k]) – min(A[i], B[j], C[k]))

<시간/>

세 개의 정렬된 배열 A, B, C(크기가 다를 수 있음)가 있다고 가정하고 트리플렛(A[i], B[j], C[k]) 배열 A, B 및 C 아래에 있도록

따라서 입력이 A :[ 2, 5, 6, 9, 11 ], B :[ 7, 10, 16 ], C :[ 3, 4, 7, 7 ] 이면 출력은 다음과 같이 1이 됩니다. A[i] =6 B[j] =7 및 C[k] =7을 선택하면 max(A[i], B[j], C[k]) - min(A [i], B[j], C[k])) =|7-6| =1

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

  • i :=A - 1의 크기
  • j :=B의 크기 - 1
  • k :=C의 크기 - 1
  • minimum_dfference :=|A[i], B[j], C[k]의 최대값 - A[i], B[j], C[k]의 최소값|
  • i는 -1과 같지 않고 j는 -1과 같지 않고 k는 -1과 같지 않지만 do
    • current_diff :=|최대 A[i], B[j], C[k] - 최소 A[i], B[j], C[k]|
    • current_diff
    • 최소_차이:=현재_차이
  • maximum_term :=A[i], B[j], C[k]의 최대값
  • A[i]가 maximum_term과 같으면
    • 나는 :=나는 - 1
  • 그렇지 않고 B[j]가 maximum_term과 같을 때
    • j :=j - 1
  • 그렇지 않으면
    • k :=k - 1>
  • 반환 minimum_dfference
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    def solve(A, B, C):
       i = len(A) - 1
       j = len(B) - 1
       k = len(C) - 1
       minimum_dfference = abs(max(A[i], B[j], C[k]) - min(A[i], B[j], C[k]))
       while i != -1 and j != -1 and k != -1:
          current_diff = abs(max(A[i], B[j], C[k]) - min(A[i], B[j], C[k]))
          if current_diff < minimum_dfference:
             minimum_dfference = current_diff
          maximum_term = max(A[i], B[j], C[k])
          if A[i] == maximum_term:
             i -= 1
          elif B[j] == maximum_term:
             j -= 1
          else:
             k -= 1
       return minimum_dfference
    A = [ 2, 5, 6, 9, 11 ]
    B = [ 7, 10, 16 ]
    C = [ 3, 4, 7, 7 ]
    print(solve(A, B, C))

    입력

    A = [ 2, 5, 6, 9, 11 ] B = [ 7, 10, 16 ] C = [ 3, 4, 7, 7 ]

    출력

    1