leetcode Day30 贪心

67 阅读1分钟

953. 验证外星语词典

var isAlienSorted = function(words, order) {
    let map=new Map()
    for(let i=0;i<order.length;i++){
        map.set(order[i],i)
    }
    map.set(undefined,-1)
    for(let i=0;i<words.length-1;i++){
        for(let j=0;j<Math.max(words[i].length,words[i+1].length);j++){
            if(words[i][j]===words[i+1][j]){
                continue
            }
            else if(map.get(words[i][j])>map.get(words[i+1][j])){
                return false
            }else{
                break
            }
        }
    }
    return true
};

134. 加油站

var canCompleteCircuit = function(gas, cost) {
    let start=0
    let curSum=0,total=0
    for(let i=0;i<gas.length;i++){
        curSum+=gas[i]-cost[i]
        total+=gas[i]-cost[i]
        if(curSum<0){
            curSum=0
            start=i+1
        }
    }
    if(total<0)return -1
    else{
        return start
    }
};

135. 分发糖果

var candy = function(ratings) {
    let left=new Array(ratings.length).fill(0)
    for(let i=0;i<ratings.length;i++){
        if(i>0 && ratings[i]>ratings[i-1]){
            left[i]=left[i-1]+1
        }else{
            left[i]=1
        }
    }
    let right=0,res=0
    for(let i=ratings.length-1;i>-1;i--){
        if(ratings[i]>ratings[i+1] && i<ratings.length-1){
            right++
        }else{
            right=1
        }
        res+=Math.max(right,left[i])
    }
    return res
};

860. 柠檬水找零

var lemonadeChange = function(bills) {
    let cur=new Array(3).fill(0)
    for(let i of bills){
        if(i===5){
            cur[0]+=1
        }else if(i===10){
            if(cur[0]<1){
                return false
            }
            cur[0]-=1
            cur[1]+=1
        }else{
            cur[2]+=1
            if(cur[0]<1){
                return false
            }else if(5*cur[0]+10*cur[1]<15){
                return false
            }else{
                if(cur[1]>0){
                    cur[1]-=1
                    cur[0]-=1
                }else{
                    cur[0]-=3
                }
            }
        }
    }
    return true
};

406. 根据身高重建队列

var reconstructQueue = function(people) {
    people.sort((a,b)=>{
        if(a[0]!==b[0]){
            return b[0]-a[0]
        }else{
            return a[1]-b[1]
        }
    })
    let res=[]
    for(let i of people){
        if(res.length<=i[1]){
            res.push(i)
        }else{
            res.splice(i[1],0,i)
        }
    }
    return res
};