Introduction
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
Input
第一行输入两个正整数n(数组长度),k(翻转次数)。
随后输入n个整数,即给定数组nums。
Output
输出翻转完毕的最大和。
Sample
input
output
Solution
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int k=s.nextInt();
PriorityQueue<Integer> queue=new PriorityQueue();
for(int i=0;i<n;i++){
queue.offer(s.nextInt());
}
while (k>0){
int num=queue.poll();
if(num<0){
queue.offer(-num);
}else {
if(k%2==0){
queue.offer(num);
}else {
queue.offer(-num);
}
}
k--;
}
int sum=0;
while (!queue.isEmpty()){
sum+=queue.poll();
}
System.out.println(sum);
}
}
Experience
总体上没什么难度,第一次使用java 的优先队列,PriorityQueue。之后会用了