这道题我的做法是进行排序 从小到大 取以一个数取反 再进行排序取反 每一次取的数都是最小的 如-10 变 10 排序 取第一个数
class Solution {
public int largestSumAfterKNegations(int[] A, int K) {
Arrays.sort(A);
int sum = 0;
for(int i = 0;i < K ;i++) {
A[0] = -A[0];
Arrays.sort(A);
}
for(int i = 0 ; i < A.length ;i++ ) {
sum += A[i];
}
return sum;
}
}
这是一种很简单的解法
另外一种是优先队列 有限队列入队列后 也会进行一个从小到大排序 跟上面差不多
class Solution {
public int largestSumAfterKNegations(int[] A, int K) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int num: A) {
pq.offer(num);
}
for (int i = 0; i < K; i++) {
pq.offer(-pq.poll());
}
int sum = 0;
while (!pq.isEmpty()) {
sum += pq.poll();
}
return sum;
}
}
原文地址:https://www.cnblogs.com/cznczai/p/11150440.html
时间: 2024-10-04 18:52:30