Skip to content

数组

👉 【LeetCode 直通车】:674 最长连续递增序列(简单)

javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var findLengthOfLCIS = function(nums) {
    let max = 1, l = 0, r = 1;
    const len = nums.length
    while(l < r && r < len) {
        if(nums[r] > nums[r - 1]) {
            max = Math.max(max, r - l + 1);
            r++;
        } else {
            l = r;
            r++;
        }
    }
    return max;
};

👉 【LeetCode 直通车】:26 删除有序数组中的重复项(简单)

javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    let cur = new Set();
    let j = 0
    while(j < nums.length) {
        let val = nums[j]
        if(!cur.has(val)) {
            cur.add(val)
            j++
        } else {
            nums.splice(j, 1)
        }
    }
};

👉 【LeetCode 直通车】:1 两数之和(简单)

javascript
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let hash = {};
    for(let i = 0; i < nums.length; i++) {
        let res = target - nums[i];
        if(hash[nums[i]] !== undefined) return [hash[nums[i]], i];
        hash[res] = i;
    }
};

👉 【LeetCode 直通车】:167 两数之和 II - 输入有序数组(简单)

同上

👉 【LeetCode 直通车】:15 三数之和(中等)

javascript
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    nums.sort((a, b) => a-b);
    let res = [];
    let len = nums.length;
    for(let i =0; i < len - 2; i++) {
        if(i> 0 &&nums[i] ===nums[i-1]) {
            continue
        }
        let target = 0 - nums[i];
        let j = i+1, k = len -1
        while( j < k) {
            if( j > i+1 && nums[j] === nums[j-1]) {
                j++;
                continue
            }
            if( k < len-1 && nums[k] === nums[k+1]) {
                k--;
                continue
            }
            if(nums[j] + nums[k] === target) {
                res.push([nums[i], nums[j], nums[k]])
                j++;
                k--;
            } else {
                if(nums[j] + nums[k] < target) {
                    j++
                } else {
                    k--
                }
            }
        }
    }
    return res;
};

👉 【LeetCode 直通车】:18 四数之和(中等)

👉 【LeetCode 直通车】:55 跳跃游戏(中等)

javascript
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var canJump = function(nums) {
    const len = nums.length;
    let cur =len -1;

    for(let i = len -2; i >= 0; i--) {
        if(nums[i] >= cur - i) {
            cur = i
        }
    }

    return cur === 0
};

👉 【LeetCode 直通车】:45 跳跃游戏 II(中等)

javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var jump = function(nums) {
    const len = nums.length;
    let setp = 0;
    let end = 0;
    let max = 0;
	// 遍历每个节点,记录 max 为上次步数所能到达的下一个节点的最远,增加一步并更新 end 为 max
    for(let i = 0; i < len-1; i++) {
        max = Math.max(max, i + nums[i]);
        if(i === end) {
            end = max;
            setp++
        }
    }

    return setp
};

👉 【LeetCode 直通车】:11 盛最多水的容器(中等)

javascript
/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
   let max = 0, len = height.length, l = 0, r = len -1;

   while(l < r) {
        let h = height[l] > height[r] ? height[r] : height[l];
        let w = r - l;
        max = Math.max(max, h * w);
        // 移动小的面积可能增大  移动大的面积一定不会增大
        if(height[l] < height[r]) {
            l++
        } else {
            r--
        }
   }
   return max
};

👉 【LeetCode 直通车】:4 寻找两个正序数组的中位数(困难)

👉 【LeetCode 直通车】:354 俄罗斯套娃信封问题(困难)

👉 【LeetCode 直通车】:128 最长连续序列(困难)

👉 【LeetCode 直通车】:42 接雨水(困难)