숫자와 승수라는 두 개의 목록이 있다고 가정합니다. 이제 숫자에서 임의의 숫자를 제거하고 승수에서 임의의 숫자를 제거한 다음 함께 곱할 수 있는 연산을 고려하십시오. 목록 중 하나가 비어 있을 때까지 이 작업을 반복해야 하며 곱한 숫자의 최대 합을 찾아야 합니다.
따라서 입력이 nums =[-4, 4, 3] multipliers =[-2, 2]와 같으면 출력은 16이 됩니다. -4를 -2와 일치시키고 4를 2와 일치시켜 -4를 얻을 수 있기 때문입니다. * -2 + 4 * 2.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
목록 번호 정렬
-
목록 승수 정렬
-
해상도 :=0
-
숫자의 크기 <승수의 크기인 경우
-
숫자와 승수 교환 :=승수, 숫자
-
-
n :=숫자 크기
-
m :=승수의 크기
-
0 ~ m - 1 범위의 i에 대해 수행
-
승수[i] <=0이면
-
res :=res + nums[i] * 승수[i]
-
-
그렇지 않으면
-
res :=res + 승수[i] * nums[n -(m - i)]
-
-
-
반환 해상도
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
def solve(nums, multipliers): nums.sort() multipliers.sort() res = 0 if len(nums) < len(multipliers): nums, multipliers = multipliers, nums n, m = len(nums), len(multipliers) for i in range(m): if multipliers[i] <= 0: res += nums[i] * multipliers[i] else: res += multipliers[i] * nums[n - (m - i)] return res nums = [-4, 4, 3] multipliers = [-2, 2] print(solve(nums, multipliers))
입력
[-4, 4, 3], [-2, 2]
출력
16