[LeetCode] 1005. Maximize Sum Of Array After K Negations

Chobby·2025년 6월 10일

😎풀이

  1. nums를 오름차 순 정렬 후 순회
    1-1. k 회까지 음수를 양수로 변환
    1-2. 모든 수를 합산
  2. 0이 존재한다면 k 수를 초기화 할 수 있음 (짝수 k번이던, 홀수 k번이던 상관 없이 처리 가능)
  3. 홀수의 k번이 남았다면, 양수 중 가장 작은 수를 합계에서 제거
  4. 합계 반환
function largestSumAfterKNegations(nums: number[], k: number): number {
    let sum = 0
    let remainK = k
    const sortedNums = nums.toSorted((a, b) => a - b)
    for(let i = 0; i < nums.length; i++) {
        if(sortedNums[i] < 0 && remainK) {
            sortedNums[i] = -sortedNums[i]
            remainK--
        }
        sum += sortedNums[i]
    }
    if(sortedNums.includes(0)) remainK = 0
    if((remainK & 1) === 1) {
        let minNum = Infinity
        for(const num of sortedNums) {
            if(num >= 0) minNum = Math.min(minNum, num)            
        }
        sum -= minNum * 2
    }
    return sum
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글