首页 > 其他 > 详细

lintcode 中等题:minimum adjustment cost 最小调整代价

时间:2016-01-17 20:07:15      阅读:202      评论:0      收藏:0      [点我收藏+]

题目

最小调整代价

给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少。

样例

对于数组[1, 4, 2, 3]和target=1,最小的调整方案是调整为[2, 3, 2, 3],调整代价之和是2。返回2。

注意

你可以假设数组中每个整数都是正整数,且小于等于100

解题

参考博客 比较复杂,自己还不能够理解,先占坑。

public class Solution {
    /**
     * @param A: An integer array.
     * @param target: An integer.
     */
    public int MinAdjustmentCost(ArrayList<Integer> A, int target) {
        // write your code here
        int lenA = A.size();
        int M[][] = new int[lenA][100];
        for(int i=0;i<A.size();i++){
            for(int j=0;j< 100;j++)
                M[i][j] = Integer.MAX_VALUE;
        }
        return helper(A,new ArrayList<Integer>(A),target,0,M);
        
    }
    public int helper(ArrayList<Integer> A,ArrayList<Integer> B,int target,int index,
    int[][] M){
        int len = A.size();
        if(index >=len){
            return 0;
        }
        int diff = 0;
        int MIN = Integer.MAX_VALUE;
        for(int i=1; i<=100;i++){
            if(index !=0 && Math.abs( i - B.get(index -1)) > target)
                continue;
            if(M[index][i-1] !=Integer.MAX_VALUE){
                diff = M[index][i -1];
                MIN = Math.min(MIN,diff);
                continue;
            }
            B.set(index,i);
            diff = Math.abs(i - A.get(index));
            diff += helper(A,B,target,index + 1,M);
            MIN = Math.min(MIN,diff);
            
            M[index][i-1] = diff;
            B.set(index,A.get(index));
        }
        return MIN;
        
    }
}

 

lintcode 中等题:minimum adjustment cost 最小调整代价

原文:http://www.cnblogs.com/theskulls/p/5136219.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!