leetcode Day31 动规

113 阅读1分钟

494. 目标和

var findTargetSumWays = function(nums, target) {
    let sum=nums.reduce((a,b)=>a+b)
    if(sum<target)return 0
    if((sum-target)%2===1)return 0
    //dp[i][j]表示在数组nums的前i个数中选取元素,使其和为j的方案数
    let dp=new Array(nums.length+1).fill(0).map(()=>new Array((sum-target)/2+1).fill(0))
    dp[0][0]=1
    for(let i=1;i<=nums.length;i++){
        const num=nums[i-1]
        for(let j=0;j<=(sum-target)/2;j++){
            dp[i][j]=dp[i-1][j]
            if(j>=num){
                dp[i][j]+=dp[i-1][j-num]
            }
        }
    }
    return dp[nums.length][(sum-target)/2]
};

53. 最大子数组和

var maxSubArray = function(nums) {
    let res=-Infinity
    let sum=0
    for(let i of nums){
        sum+=i
        if(sum>res){
            res=sum
        }
        if(sum<0){
            sum=0
        }
    }
    return res
};

剑指 Offer II 035. 最小时间差

const timePoints = ["23:59","00:00","02:56","23:14"]
var findMinDifference = function(timePoints) {
    timePoints.sort()
    let res=Math.min((getMinite(timePoints[timePoints.length-1])-getMinite(timePoints[0])),(getMinite(timePoints[0])+1440-getMinite(timePoints[timePoints.length-1])))
    for(let i=0;i<timePoints.length-1;i++){
        res=Math.min(res,getMinite(timePoints[i+1])-getMinite(timePoints[i]))
    }
    return res
};
const getMinite=(s)=>{
    let times=s.split(':').map(i=>i*1)
    return times[0]*60+times[1]
}

剑指 Offer II 036. 后缀表达式

var evalRPN = function(tokens) {
    const stack=[]
    const methods=["+","-","*","/"]
    for(let i of tokens){
        if(!methods.includes(i)){
            stack.push(i*1)
        }else{
            nums1=stack.pop()
            nums2=stack.pop()
            if(i==="+"){
                stack.push(nums1+nums2)
            }else if(i==='-'){
                stack.push(nums2-nums1)
            }
            else if(i==='*'){
                stack.push(nums2*nums1)
            }else if(i==='/'){
                stack.push((nums2/nums1)>0?Math.floor(nums2/nums1):Math.ceil(nums2/nums1))
            }
        }
    }
    return stack.pop()
};