2026-2-9:LeetCode每日一题(动态规划专项)

2026-2-9:LeetCode每日一题(动态规划专项)

爬代价楼梯

题目描述:

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

难于昨天的楼梯

昨天的爬楼梯https://blog.ZEEKLOG.net/2401_87095818/article/details/157910173?fromshare=blogdetail&sharetype=blogdetail&sharerId=157910173&sharerefer=PC&sharesource=2401_87095818&sharefrom=from_link

解法一:(递归版)

源码:

class Solution { int n1(int n, vector<int>& cost, vector<int>& vis) { if (n > 2) { if (vis[n] != 0) { return vis[n]; } else { vis[n] = min(n1(n - 1, cost, vis) + cost[n - 1], n1(n - 2, cost, vis) + cost[n - 2]); return vis[n]; } } else { if (n == 1) { return 0; } else { return min(cost[0], cost[1]); } } } public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); vector<int> vis(n + 1); return n1(n, cost, vis); } };

说明:

超时了

解法二:

源码:

class Solution { int n1(int n, vector<int>& cost, vector<int>& vis) { vis[1] = 0; vis[2] = min(cost[0], cost[1]); for (int i = 3; i <= n; i++) { vis[i] = min(vis[i - 1] + cost[i - 1], vis[i - 2] + cost[i - 2]); } return vis[n]; } public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); vector<int> vis(n + 1); return n1(n, cost, vis); } };

说明:

递归太耗时了,循环替代。

解法三:

源码:

class Solution { int n1(int n, vector<int>& cost) { if (n == 1) return 0; if (n == 2) return min(cost[0], cost[1]); int a = 0; // 对应vis[1] int b = min(cost[0], cost[1]); // 对应vis[2] int res = 0; for (int i = 3; i <= n; i++) { res = min(b + cost[i - 1], a + cost[i - 2]); a = b; b = res; } return res; } public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); return n1(n, cost); } };

说明:

去掉数组,进一步压缩空间

总结

递归超时有3个主要原因:

1.函数调用栈的硬开销(主要原因)

递归的每一次调用,系统都需要:

  • 为函数创建栈帧(保存返回地址、参数、局部变量);
  • 把参数(n、cost、vis)从当前函数复制到新函数;
  • 函数执行完成后,销毁栈帧并返回结果;

2.缓存访问的开销

递归函数中存在一些判断,多次调用多次判断

3.系统对递归的限制

操作系统对函数栈的深度有上限,超出会直接触发栈溢出错误,而迭代没有这个限制

Read more

【分治法 BFS 质因数分解】P12255 [蓝桥杯 2024 国 Java B] 园丁|普及+

【分治法 BFS 质因数分解】P12255 [蓝桥杯 2024 国 Java B] 园丁|普及+

本文涉及知识点 数论:质数、最大公约数、菲蜀定理 C++BFS算法 P12255 [蓝桥杯 2024 国 Java B] 园丁 题目描述 小明是一位尽职尽责的园丁。这天他负责维护一棵树,树上有 n n n 个结点 1 , 2 , … , n 1, 2, \ldots, n 1,2,…,n,根结点为 1 1 1,结点 i i i 的权值为 a i a_i ai 。他需要更改一些结点的权值为任意正整数,使得对于任意一个至少有 2 2

By Ne0inhk

Java:跨越二十余载的编程传奇与生态帝国及实战应用解析

在编程语言的浩瀚星河中,有这样一门语言,它诞生于互联网萌芽的年代,历经二十余载技术浪潮的洗礼,既见证了行业的迭代变迁,也始终稳稳占据着核心地位。它就是Java——一门以“一次编写,到处运行”为核心理念,以稳健、安全、可扩展为标签的编程语言。从早期的桌面应用到如今的云原生架构,从移动终端到大数据集群,Java的身影遍布数字世界的每一个角落,成为无数开发者的入门首选,更是企业级应用的基石支柱。 回溯Java的诞生,充满了时代的必然性与偶然的创新性。上世纪90年代初,互联网尚未普及,计算机领域正处于客户端/服务器架构的兴起阶段,不同硬件平台、操作系统之间的兼容性问题成为开发者的最大痛点。当时,Sun公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)团队正致力于开发一款能够跨平台运行的嵌入式系统语言,初衷是为智能家电提供统一的编程解决方案。最初,团队将这门语言命名为“Oak”(橡树),灵感源自高斯林办公室外的一棵橡树。但由于“Oak”商标已被占用,团队在1995年正式将其更名为“Java”——一个充满活力与包容性的名字,也开启了它的传奇之旅。 Java的横空出世,并

By Ne0inhk

Exception in thread “main“ java.lang.NoSuchMethodError: ‘java.lang.String org.junit.platform.engine.

初始化的项目出现junit报错 Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String org.junit.platform.engine.discovery.MethodSelector.getMethodParameterTypes()' at com.intellij.junit5.JUnit5TestRunnerUtil.loadMethodByReflection(JUnit5TestRunnerUtil.java:127) at com.intellij.junit5.JUnit5TestRunnerUtil.buildRequest(JUnit5TestRunnerUtil.java:102) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:43) at

By Ne0inhk
Stitch——Google热门的免费AI UI设计工具

Stitch——Google热门的免费AI UI设计工具

Google Stitch是谷歌在2025年I/O大会上推出的一款AI驱动的UI设计工具。它能根据文字描述或草图快速生成网页和移动端界面,并导出可用于开发的前端代码,并且可以直接与另一个前端AI编码工具AI Studio直接联动,将生成的UI发给AI Studio进行开发。 访问方式与要求: 1. 通过访问官网(stitch.withgoogle.com),使用谷歌账户登录即可开始使用。 2. Google Stitch并不支持全部地区,如vpn设置为中国香港也无法访问,美国地区可以使用。 使用流程: 第一步:进入官网并完成登录: 第二步:选择合适的模型: 1. 默认选择的是3 Flash,使用Gemini 3.0 Flash,生成速度较快。 2. 3 Pro模式下,优先保障高质量与推理能力,速度缓与3 Flash。 3. Redesign模式使用Nano Banana Pro重新设计现有项目,需要添加屏幕截图。 4. Ideate模式下,支持提出问题并寻找解决方案。 第三步:选择移动端或Web端并添加描述:

By Ne0inhk