Introduction
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
Input
第一行输入两个正整数n(数组长度),k(翻转次数)。
随后输入n个整数,即给定数组nums。
Output
输出翻转完毕的最大和。
Sample
input
3 1 4 2 3
output
5
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。之后会用了