DeepSeek LeetCode 3699. 锯齿形数组的总数 I Java实现

发布时间:2026/9/11 23:00:17
DeepSeek    LeetCode 3699. 锯齿形数组的总数 I Java实现 这道题的核心是动态规划 前缀和优化。因为数组的增减趋势必须交替如 abcd我们只需记录最后一个值和最后一步方向。核心思路· 状态定义up[i] 表示最后一步为上升且以值 i 结尾的方案数down[i] 同理为下降。· 状态转移· 要形成新的上升到 x前一步必须是下降且结尾值 xnewUp[x] sum(down[0] ... down[x-1])。· 要形成新的下降到 x前一步必须是上升且结尾值 xnewDown[x] sum(up[x1] ... up[m-1])。· 优化用前缀和快速计算 newUp用后缀和快速计算 newDown避免遍历求和将复杂度从 O(n·m²) 降至 O(n·m)。---Java 实现空间优化版 O(m)javaclass Solution {private static final int MOD 1_000_000_007;public int zigZagArrays(int n, int l, int r) {int m r - l 1; // 取值个数// 初始化长度为 1 的情况每个值都可以作为起点long[] up new long[m];long[] down new long[m];for (int i 0; i m; i) {up[i] 1;down[i] 1;}// 重复 n-1 次每次在末尾添加一个数for (int len 2; len n; len) {long[] newUp new long[m];long[] newDown new long[m];// 计算前缀和用于 newUplong prefixSum 0;for (int x 0; x m; x) {newUp[x] prefixSum; // sum of down[0..x-1]prefixSum (prefixSum down[x]) % MOD;}// 计算后缀和用于 newDownlong suffixSum 0;for (int x m - 1; x 0; x--) {newDown[x] suffixSum; // sum of up[x1..m-1]suffixSum (suffixSum up[x]) % MOD;}up newUp;down newDown;}// 答案所有 up 和 down 之和long ans 0;for (int i 0; i m; i) {ans (ans up[i] down[i]) % MOD;}return (int) ans;}}另一种写法滚动数组 前缀和数组使用 prefixSums 和 suffixSums 辅助计算javaclass Solution {private static final int MOD 1_000_000_007;public int zigZagArrays(int n, int l, int r) {int m r - l 1;int[] up new int[m];int[] down new int[m];int[] prefixUp new int[m 1];int[] prefixDown new int[m 1];for (int j 0; j m; j) {up[j] 1;down[j] 1;prefixUp[j 1] (prefixUp[j] up[j]) % MOD;prefixDown[j 1] (prefixDown[j] down[j]) % MOD;}for (int i 1; i n; i) {int[] newUp new int[m];int[] newDown new int[m];int[] newPrefixUp new int[m 1];int[] newPrefixDown new int[m 1];for (int j 0; j m; j) {// 上升前一步下降且值 jnewUp[j] (j 0) ? prefixDown[j] : 0; // prefixDown[j] sum(down[0..j-1])// 下降前一步上升且值 jnewDown[j] (j 1 m) ? (prefixUp[m] - prefixUp[j 1] MOD) % MOD : 0;newPrefixUp[j 1] (newPrefixUp[j] newUp[j]) % MOD;newPrefixDown[j 1] (newPrefixDown[j] newDown[j]) % MOD;}up newUp;down newDown;prefixUp newPrefixUp;prefixDown newPrefixDown;}return (prefixUp[m] prefixDown[m]) % MOD;}}复杂度· 时间复杂度O(n·m)· 空间复杂度O(m)

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询