leetcode Day57 剑指专项88-91

97 阅读1分钟

剑指 Offer II 041. 滑动窗口的平均值

var MovingAverage = function(size) {
    this.arr=[]
    this.l=size
    this.sum=0
};

/** 
 * @param {number} val
 * @return {number}
 */
MovingAverage.prototype.next = function(val) {
    this.arr.push(val)
    this.sum+=val
    if(this.arr.length>this.l){
        this.sum-=this.arr.shift()
    }
    return this.sum/this.arr.length
};

剑指 Offer II 088. 爬楼梯的最少成本

var minCostClimbingStairs = function(cost) {
    const dp=new Array(cost.length+1)
    dp[0]=0,dp[1]=0
    for(let i=2;i<cost.length+1;i++){
        dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
    }
    return dp[cost.length]
};

剑指 Offer II 089. 房屋偷盗

var rob = function(nums) {
    const dp=new Array(nums.length)
    dp[0]=nums[0]
    dp[1]=Math.max(nums[0],nums[1])
    for(let i=2;i<nums.length;i++){
        dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1])
    }
    return dp[nums.length-1]
};

剑指 Offer II 090. 环形房屋偷盗

var rob = function(nums) {
    if(nums.length===1){
        return nums[0]
    }
    return Math.max(helper(nums.slice(0,nums.length-1)),helper(nums.slice(1,nums.length)))
};
const helper=(nums)=>{
    const dp=new Array(nums.length)
    dp[0]=nums[0]
    dp[1]=Math.max(nums[0],nums[1])
    for(let i=2;i<nums.length;i++){
        dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1])
    }
    return dp[nums.length-1]
}

剑指 Offer II 091. 粉刷房子

var minCost = function(costs) {
    const n = costs.length;
    let dp = new Array(3).fill(0);
    for (let j = 0; j < 3; j++) {
        dp[j] = costs[0][j];
    }
    for (let i = 1; i < n; i++) {
        const dpNew = new Array(3).fill(0);
        for (let j = 0; j < 3; j++) {
            dpNew[j] = Math.min(dp[(j + 1) % 3], dp[(j + 2) % 3]) + costs[i][j];
        }
        dp = dpNew;
    }
    return parseInt(_.min(dp));
};