LintCode-最小调整代价

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

样例

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

注意

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

分析:一般这种题,每个位置上都有很多种可能,基本上就是动态规划了,又因为每个位置最多100,于是可以枚举每个位置的数值,用dp[i][j]表示到第i个数为止,第i个数变成j后的最小调整代价,状态转移只和i-1有关,可以进行空间优化。

代码:

class Solution {
public:
    /**
     * @param A: An integer array.
     * @param target: An integer.
     */
    int MinAdjustmentCost(vector A, int target) {
        // write your code here
        if(A.size()<2)
            return 0;
        vector > dp(A.size(),vector(101,0));
        for(int i=0;i<101;i++)
            dp[0][i] = abs(A[0]-i);
        for(int i=1;i


你可能感兴趣的:(面试)