美文网首页
算法复习(1)-K 次取反后最大化的数组和

算法复习(1)-K 次取反后最大化的数组和

作者: 爱编程的凯哥 | 来源:发表于2019-11-02 10:30 被阅读0次

题目:

K 次取反后最大化的数组和

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations

解:

分析例子:


image.png

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));
    }

}

相关文章

网友评论

      本文标题:算法复习(1)-K 次取反后最大化的数组和

      本文链接:https://www.haomeiwen.com/subject/utidmctx.html