문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 nums와 정수 k가 주어졌을 때, 다음과 같이 배열을 수정해라.
이 과정을 정확히 k번 반복해야 한다. 동일한 인덱스 i를 여러 번 선택할 수 있다.
이렇게 수정된 배열의 합 중에서 가장 큰 값을 반환해라.
#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]가 된다.
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;
}
}