leetcode Day21 贪心

96 阅读1分钟

713. 乘积小于 K 的子数组

var numSubarrayProductLessThanK = function(nums, k) {
    let res=0,l=0,cur=1
    for(let r=0;r<nums.length;r++){
        cur=cur*nums[r]
        while(l<=r && cur>=k){
            cur=cur/nums[l]
            l++
        }
        res=res+r-l+1
    }
    return res
};

1005. K 次取反后最大化的数组和

var largestSumAfterKNegations = function(nums, k) {
    nums.sort((a,b)=>Math.abs(b)-Math.abs(a))
    for(let i=0;i<nums.length;i++){
        if(nums[i]<0 && k>0){
            nums[i]=-nums[i]
            k--
        }
    }
    if(k>0 && k%2===1){
        nums[nums.length-1]=-nums[nums.length-1]
    }
    return nums.reduce((a,b)=>a+b)
};