1005.K 次取反后最大化的数组和
这道题我的做法是进行排序 从小到大 取以一个数取反 再进行排序取反 每一次取的数都是最小的 如-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 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; } }