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

Python에서 최대 k개의 부정 연산을 수행하여 최대 합을 찾는 프로그램

<시간/>

num이라는 요소 목록이 있고 또 다른 값 k가 있다고 가정합니다. 이제 nums에서 요소를 선택하고 부정하는 연산을 고려해 보겠습니다. 정확히 k개의 연산을 수행할 수 있습니다. 생성할 수 있는 최대 결과 합계를 찾아야 합니다.

따라서 입력이 nums =[2, 1, -6, -2] k =3과 같으면 출력은 9가 됩니다. -6과 -2를 부정하고 1은 [2, -1, 6 , 2]이고 합은 9입니다.

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

  • n :=숫자 크기

  • n이 0과 같으면

    • 0 반환

  • 목록 번호 정렬

  • 0 ~ n - 1 범위의 idx에 대해

    • nums[idx] <0이고 k> 0이면

      • k :=k - 1

      • 숫자[idx] :=-nums[idx]

  • k가 홀수이면

    • 반환(숫자에 있는 모든 요소의 합) - (2 * 숫자의 최소값)

  • nums에 있는 모든 요소의 합계를 반환합니다.

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

def solve(nums, k):
   n = len(nums)
   if n == 0:
      return 0

   nums.sort()
   for idx in range(n):
      if nums[idx] < 0 and k > 0:
         k -= 1
         nums[idx] *= -1

   if k & 1 == 1:
      return sum(nums) - 2 * min(nums)

   return sum(nums)

nums = [2, 1, -6, -2]
k = 3
print(solve(nums, k))

입력

[2, 1, -6, -2], 3

출력

9