[LeetCode] Maximize Sum Of Array After K Negations

아르당·2026년 3월 23일

LeetCode

목록 보기
217/263
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

정수 배열 nums와 정수 k가 주어졌을 때, 다음과 같이 배열을 수정해라.

  • 인덱스 i를 선택하고, nums[i]를 -nums[i]로 바꿔라.

이 과정을 정확히 k번 반복해야 한다. 동일한 인덱스 i를 여러 번 선택할 수 있다.

이렇게 수정된 배열의 합 중에서 가장 큰 값을 반환해라.

Example

#1
Input: nums = [4, 2, 3], k = 1
Output: 5
Explanation: 인덱스 1을 선택하고, nums는 [4, -2, 3]이 된다.

#2
Input: nums = [3, -1, 0, 2], k = 3
Output: 6
Explanation: 인덱스 1, 2, 2를 선택하고, nums는 [3, 1, 0, 2]가 된다.

#3
Input: nums = [2, -3, -1, 5, -4], k = 2
Output: 13
Explanation: 인덱스 1, 4를 선택하고, nums는 [2, 3, -1, 5, 4]가 된다.

Constraints

  • 1 <= nums.length <= 10^4
  • -100 <= nums[i] <= 100
  • 1 <= k <= 10^4

Solved

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        int[] numbers = new int[201];
        int result = 0;
        int max = 0;

        for(int num : nums){
            max = Math.max(max, Math.abs(num));
            numbers[100 + num]++;
            result += num;
        }

        if(max == 0){
            return 0;
        }

        while(k-- != 0){
            int i = 100 - max;

            while(numbers[i] == 0){
                i++;
            }

            numbers[i]--;
            numbers[200 - i]++;
            result -= 2 * (i - 100);
        }

        return result;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글