From b8320d21bce450dc0a13927accb3a6edb923a079 Mon Sep 17 00:00:00 2001 From: Hidemichi Shimura Date: Sun, 15 Jan 2023 09:26:23 -0800 Subject: [PATCH 1/2] solve 1005. Maximize Sum Of Array After K Negations --- ...maximize-sum-of-array-after-k-negations.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 1005.maximize-sum-of-array-after-k-negations.js diff --git a/1005.maximize-sum-of-array-after-k-negations.js b/1005.maximize-sum-of-array-after-k-negations.js new file mode 100644 index 00000000..71932aca --- /dev/null +++ b/1005.maximize-sum-of-array-after-k-negations.js @@ -0,0 +1,34 @@ +/* URL of this problem + * https://leetcode.com/problems/maximize-sum-of-array-after-k-negations/description/ + * + * @param {number[]} nums + * @param {number} k + * @return {number} + */ + +var largestSumAfterKNegations = function(nums, k) { + const ModifiedNums = [...nums]; + let minNum = Math.min(...ModifiedNums); + let minNumIdx = ModifiedNums.indexOf(minNum); + let repeat = k; + + while (minNum < 0 && repeat > 0) { + ModifiedNums[minNumIdx] *= -1; + + minNum = Math.min(...ModifiedNums); + minNumIdx = ModifiedNums.indexOf(minNum); + repeat--; + } + + // Convert the minimum negative number to the positive one by multiplying -1 to maximize the sum of numbers + // if the conversion still needs to be done, which is that repeat is odd + if (repeat % 2 === 1) { + ModifiedNums[minNumIdx] *= -1; + } + + return ModifiedNums.reduce((sum, curr) => { + return sum + curr + }, 0); +}; + +module.exports = largestSumAfterKNegations; \ No newline at end of file From 8d3e7b7b3fdac790a5b61bc52daa4ba968ef6f69 Mon Sep 17 00:00:00 2001 From: Hidemichi Shimura Date: Sun, 15 Jan 2023 09:26:41 -0800 Subject: [PATCH 2/2] test function largestSumAfterKNegations --- largestSumAfterKNegations.test.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 largestSumAfterKNegations.test.js diff --git a/largestSumAfterKNegations.test.js b/largestSumAfterKNegations.test.js new file mode 100644 index 00000000..ddf361a0 --- /dev/null +++ b/largestSumAfterKNegations.test.js @@ -0,0 +1,17 @@ +const largestSumAfterKNegations = require("../jest-test/1005.maximize-sum-of-array-after-k-negations"); + +test("Return the sum of nums after converting the minmum number", () => { + expect(largestSumAfterKNegations([3,-1,0,2], 3)).toBe(6); +}); + +test("Return the sum of nums after converting the first k minmum numbers", () => { + expect(largestSumAfterKNegations([2,-3,-1,5,-4], 2)).toBe(13); +}); + +test("Return 0 if nums consists of 0s", () => { + expect(largestSumAfterKNegations([0,0,0], 2)).toBe(0); +}); + +test("Return Infinity if nums is empty", () => { + expect(largestSumAfterKNegations([], 2)).toBe(0); +}); \ No newline at end of file