每日题单 · 2026-09-20

用法

每题先自己写 25 分钟(时间盒),卡住就找我要档位提示;做完把 [x] 勾上。 复盘题不写新笔记,直接在原文出处下方追加「二刷日期 + 一句话卡点」。

🆕 新题(codetop 前端岗频率榜)

题目难度频率状态
53. 最大子数组和中等38🔁(已刷过,重做)
121. 买卖股票的最佳时机简单36🔁(已刷过,重做)

🔁 复盘(vault 轮换池)

题目难度频率备注
爬楼梯简单28复盘 · 出处:GRD 动态规划
零钱兑换中等17复盘 · 出处:GRD 动态规划

完成打卡

/**
 * Kadane 算法 / 滚动变量优化 O(1) 空间
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let res = nums[0], pre = nums[0]
    for(let i = 1; i < nums.length; i++) {
        pre = Math.max(nums[i], nums[i]+ pre)
        res = Math.max(res, pre)
    }
    return res
};
/**
 * 一次遍历贪心维护历史最低点 / 空间 O(1)
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let min = prices[0]
    let res = 0
    for(let i = 1; i < prices.length; i++) {
        min = Math.min(min, prices[i])
        res = Math.max(res, prices[i] - min)
    }
    return res
};
/**
 * 斐波那契递推 / 解构赋值滚动变量
 * @param {number} n
 * @return {number}
 */
var climbStairs = function (n) {
    let x = 0
    let y = 1
    for(let i = 2; i<= n; i++) {
        [x, y] = [y, x+y]
    }
    return y+x
};
/**
 * 完全背包模型 / 自底向上 DP
 * @param {number[]} coins
 * @param {number} amount
 * @return {number}
 */
var coinChange = function (coins, amount) {
    let dp = new Array(amount + 1).fill(Infinity)
    
    dp[0] = 0
    for(let coin of coins) {
        for(let i = coin; i<=amount; i++) {
            dp[i] = Math.min(dp[i-coin] + 1, dp[i])
        }
    }
 
    return dp[amount] === Infinity ? -1 : dp[amount]
};