题目:
K 次取反后最大化的数组和
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations
解:
分析例子:
1.每次找到最小的数的位置
2.反转最小的数
实现
package K次反转取最大值;
/**
* @Description:
* @Author: kai.yang
* @Date: 2019-11-02 09:38
*/
public class Test {
/**
* 找到最小的index
*/
public int getIndexs(int[] datas) {
int temp = datas[0];
int index = -1;
if (datas == null || datas.length == 0) {
return index;
}
for (int i = 0; i < datas.length; i++) {
if (datas[i] <= temp) {
temp = datas[i];
index = i;
}
}
return index;
}
/**
* 反转最小的数
* @param datas
* @param minIndex
* @return
*/
public int[] changeMin(int[] datas, int minIndex) {
datas[minIndex] = -datas[minIndex];
return datas;
}
/**
* 求最终和
* @param datas
* @param k
* @return
*/
public int sumMax(int[] datas, int k) {
for (int i = 0; i < k; i++) {
datas = changeMin(datas, getIndexs(datas));
}
int sum = 0;
for (int i : datas) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int[] datas = new int[]{1, 2, 3, 4, 5, -1, 4, 3, -9, 4};
Test test=new Test();
System.out.println("最终结果=" + test.sumMax(datas, 6));
}
}