n개의 정수를 가진 배열 arr이 있다고 가정하고 배열에서 arr[i]Carr[j]가 최대한 크도록 arr[i]와 arr[j]를 찾아야 합니다. 한 쌍 이상이면 그 중 하나를 반환하십시오.
따라서 입력이 [4, 1, 2]와 같으면 출력은 4C1 =4, 4C2 =6 및 2C1 =2이므로 4 2가 되므로 (4,2)는 우리가 원하는 대로만 쌍입니다.피>
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 목록 정렬
- N :=v[n - 1]
- N mod 2가 1과 같으면
- 첫 번째 :=N / 2(정수 나누기)
- 두 번째 :=첫 번째 + 1
- 왼쪽 :=-1, 오른쪽 :=-1
- 온도 :=-1
- 0에서 n 사이의 i에 대해
- v[i]> 먼저, 그러면
- temp :=나
- 중단
- 그렇지 않으면
- 차이 :=첫 번째 - v[i]
- 차이가
- res1 :=차이
- 왼쪽 :=v[i]
- v[i]> 먼저, 그러면
- 맞음 :=v[temp]
- 차이1 :=첫 번째 - 왼쪽
- 차이2 :=오른쪽 - 두 번째
- 차이1 <차이2이면
- 인쇄(N, 왼쪽)
- 그렇지 않으면
- 인쇄(N, 오른쪽)
- 최대 :=N / 2(정수 나누기)
- res :=3*(10^18)
- R :=-1
- 0 ~ n - 1 범위의 i에 대해
- 차이:=|v[i] - 최대|
- 차이
- res :=차이
- R :=v[i]
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def findMatrixPair(v, n): v.sort() N = v[n - 1] if N % 2 == 1: first = N // 2 second = first + 1 res1, res2 = 3 * (10 ** 18), 3 * (10 ** 18) left, right = -1, -1 temp = -1 for i in range(0, n): if v[i] > first: temp = i break else: difference = first - v[i] if difference < res1: res1 = difference left = v[i] right = v[temp] difference1 = first - left difference2 = right - second if difference1 < difference2: print(N, left) else: print(N, right) else: max = N // 2 res = 3 * (10 ** 18) R = -1 for i in range(0, n - 1): difference = abs(v[i] - max) if difference < res: res = difference R = v[i] print(N, R) v = [4,1,2] n = len(v) findMatrixPair(v, n)
입력
[4,1,2], 3
출력:
4 2