LeetCode 1005. Maximize Sum Of Array After K Negations
考点 | 难度 |
---|---|
Sorting | Easy |
题目
Given an integer array nums
and an integer k
, modify the array in the following way:
choose an index i
and replace nums[i]
with -nums[i]
.
You should apply this process exactly k times. You may choose the same index i multiple times.
Return the largest possible sum of the array after modifying it in this way.
思路
把所有数字放到priority queue,选出最小得数乘-1,再放回priority queue,重复k次。
答案
public int largestSumAfterKNegations(int[] nums, int k) {
// Create a priority queue and insert all array elements in the priority queue TC: O(n)
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int num : nums)
pq.add(num);
// Do k negations by removing a minimum element k times TC: O(log n)
while(k--> 0) {
int temp = pq.poll(); // Retrieve and remove min element
temp *= -1; // Modify the min element and add it back to priority queue
pq.add(temp);
}
// Compute sum of all elements in priority queue
int sum = 0;
for(int num : pq)
sum += num;
return sum;
}