LeeCode-刷题日记-Day18

334. 递增的三元子序列

维护一个最小值数组,存储当前i对应的最小值。同时维护一个最大值数组,存储当前i对应的最大值。判定当前nums[i]是否处于前后的最大值与最小值之间。成立则存在一个递增的三元子序列。

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var increasingTriplet = function(nums) {
    if(nums.length<3) return false;
    let leftMin = new Array(nums.length).fill(0);
    let rightMax= new Array(nums.length).fill(0);
    leftMin[0]=nums[0];
    rightMax[nums.length-1]=nums[nums.length-1];
    for(let i=1;i<nums.length;i++){
        leftMin[i]=Math.min(leftMin[i-1],nums[i]);
    }
    for(let i=nums.length-2;i>=0;i--){
        rightMax[i]=Math.max(rightMax[i+1],nums[i]);
    }
    for(let i=1;i<nums.length-1;i++){
        if(nums[i]>leftMin[i-1]&&nums[i]<rightMax[i+1])
            return true;
    }
    return false;
};

238. 除自身以外数组的乘积

除自身以外数组的乘积可以视为,此数左乘积和右乘积相乘。需要维护一个左乘积,一个右乘积。

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    const res = new Array(nums.length).fill(1);
    let temp=1;
    for(let i=0;i<nums.length;i++){
        res[i]=temp*res[i];
        temp=temp*nums[i];
    }
    temp=1;
    for(let j=nums.length-1;j>=0;j--){
        res[j]=temp*res[j];
        temp = temp*nums[j];
    }
    return res;
}