1005. Maximize Sum Of Array After K Negations
given inteiro array nums и inteiro k, измените array следующим образом: выберите индекс i и замените nums[i] на -nums[i]. Вы должны применить этот процесс ровно k раз. Вы можете выбрать один и тот же индекс i несколько раз. return наибольшую возможную сумму arrayа после его модификации таким образом.
Exemplo:
Input: nums = [4,2,3], k = 1
Output: 5
C# solução
correspondente/originalpublic class Solution {
public int LargestSumAfterKNegations(int[] nums, int k) {
Array.Sort(nums);
for (int i = 0; i < nums.Length; i++) {
if (k > 0 && nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
if (k % 2 == 1) {
Array.Sort(nums);
nums[0] = -nums[0];
}
return nums.Sum();
}
}
C++ solução
rascunho automático, revisar antes de enviar#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int LargestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++) {
if (k > 0 && nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
if (k % 2 == 1) {
sort(nums.begin(), nums.end());
nums[0] = -nums[0];
}
return nums.Sum();
}
}
Java solução
correspondente/originalimport java.util.Arrays;
public class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
if (k > 0 && nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
if (k % 2 == 1) {
Arrays.sort(nums);
nums[0] = -nums[0];
}
return Arrays.stream(nums).sum();
}
}
JavaScript solução
correspondente/originalclass Solution {
largestSumAfterKNegations(nums, k) {
nums.sort((a, b) => a - b);
for (let i = 0; i < nums.length; i++) {
if (k > 0 && nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
if (k % 2 === 1) {
nums.sort((a, b) => a - b);
nums[0] = -nums[0];
}
return nums.reduce((a, b) => a + b, 0);
}
}
Python solução
correspondente/originalclass Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
nums.sort()
for i in range(len(nums)):
if k > 0 and nums[i] < 0:
nums[i] = -nums[i]
k -= 1
if k % 2 == 1:
nums.sort()
nums[0] = -nums[0]
return sum(nums)
Go solução
correspondente/originalimport (
"sort"
)
func largestSumAfterKNegations(nums []int, k int) int {
sort.Ints(nums)
for i := 0; i < len(nums); i++ {
if k > 0 && nums[i] < 0 {
nums[i] = -nums[i]
k--
}
}
if k % 2 == 1 {
sort.Ints(nums)
nums[0] = -nums[0]
}
sum := 0
for _, num := range nums {
sum += num
}
return sum
}
Algorithm
Сортировка arrayа:
Отсортируйте array nums по возрастанию, чтобы наибольшее количество раз менять самые маленькие (отрицательные) значения на их противоположные.
Модификация arrayа:
Пройдитесь по отсортированному arrayу и замените k наименьших значений на их противоположные (умножьте на -1). Если встретите 0, прекратите дальнейшие изменения, так как изменение 0 на -0 не имеет смысла.
Проверка остатка изменений:
Если после первого прохода остались изменения (k нечетное), то find минимальное значение в измененном arrayе и еще раз поменяйте его знак. Это обеспечит максимальную сумму.
😎
Vacancies for this task
vagas ativas with overlapping task tags are mostradas.