新闻详情

新闻详情

首页 / 资讯中心 / 详情

千问 LeetCode 3177. 求出最长好子序列 II Java实现

发布时间:2026/9/8 9:58:32来源:尧图网络
千问    LeetCode 3177. 求出最长好子序列 II Java实现
针对 LeetCode 3177. 求出最长好子序列 II由于数据规模较大常规的动态规划如三重循环或双重循环会导致超时。我们需要使用 哈希表 动态规划 前缀和全局最大值优化 来将时间复杂度降至 O(N times K)。核心思路1. 状态定义定义 dp[x][j] 表示以数值 x 结尾且恰好有 j 个相邻不同元素坏对的最长好子序列长度。2. 状态转移- 如果当前数字 x 与上一个数字相同则不增加坏对数量dp[x][j] dp[x][j] 1。- 如果当前数字 x 与上一个数字不同则坏对数量加 1dp[x][j] max(dp[y][j-1]) 1其中 y ! x。3. 优化- 使用哈希表HashMap存储以各个数值结尾的状态避免遍历整个数组。- 维护一个数组 globalMax[j]记录所有数值中坏对数量为 j 时的最长子序列长度。这样在遇到不同数字时可以直接通过 globalMax[j-1] 1 获取最优解省去遍历其他数值的开销。- 在更新哈希表时需从后往前从 k 到 0遍历 j防止同一轮次的数据被重复使用。Java 代码实现class Solution {public int maximumLength(int[] nums, int k) {// dp: key为数组中的值value为长度为k1的数组表示以该值结尾、包含0~k个不同相邻对的最大长度MapInteger, int[] dp new HashMap();// globalMax[j]: 记录当前所有数字中以恰好 j 个不同相邻对结尾的最大子序列长度int[] globalMax new int[k 2];for (int x : nums) {// 如果当前数字第一次出现初始化其对应的dp数组if (!dp.containsKey(x)) {dp.put(x, new int[k 1]);}int[] curDp dp.get(x);// 必须从 k 倒序遍历到 0避免本轮更新的数据影响后续状态的转移for (int j k; j 0; j--) {// 状态转移取“延续相同数字”和“接续不同数字”中的最大值然后 1// globalMax[j] 已经包含了相同数字的情况因为 f(x,j) f(x,j-1)curDp[j] Math.max(curDp[j], globalMax[j]) 1;// 更新全局最大值注意对应到 globalMax 的索引需要 1globalMax[j 1] Math.max(globalMax[j 1], curDp[j]);}}// 返回包含最多 k 个不同相邻对的最大长度return globalMax[k 1];}}复杂度分析- 时间复杂度O(N times K)其中 N 是数组 nums 的长度。对于每个元素我们只需要在内层循环中遍历 K 次即可完成状态转移。- 空间复杂度O(U times K)其中 U 是数组 nums 中不同数字的个数最坏情况下为 O(N times K)。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

量化概念 23:信息比率(选股能力的标尺) 2026/9/8 20:44:05

量化概念 23:信息比率(选股能力的标尺)

两个策略,年化收益都是 16%。一个紧跟沪深 300,波动低、夏普高。另一个集中持股、偏离基准猛、总波动大。夏普说前者好——每单位总风险换来的收益更高。但前者赚的钱可能只是"跟着指数涨",没有选股能力。信息比率就是来量这个的&a…

阅读更多 →
Nuxt 内置路由出口组件 `<NuxtPage>` 完全指南:Props、页面过渡与 Suspense 生命周期 2026/9/8 20:44:05

Nuxt 内置路由出口组件 `<NuxtPage>` 完全指南:Props、页面过渡与 Suspense 生命周期

Nuxt 内置路由出口组件 <NuxtPage> 完全指南&#xff1a;Props、页面过渡与 Suspense 生命周期 【免费下载链接】nuxt the full-stack Vue framework 项目地址: https://gitcode.com/GitHub_Trending/nu/nuxt <NuxtPage> 是 Nuxt 框架内置的路由出口组件&am…

阅读更多 →
GitHub CLI 的 Codespaces gRPC 协议缓冲区生成指南:从 .proto 契约到可测试客户端 2026/9/8 20:44:05

GitHub CLI 的 Codespaces gRPC 协议缓冲区生成指南:从 .proto 契约到可测试客户端

GitHub CLI 的 Codespaces gRPC 协议缓冲区生成指南&#xff1a;从 .proto 契约到可测试客户端 【免费下载链接】cli GitHub’s official command line tool 项目地址: https://gitcode.com/GitHub_Trending/cli/cli 本文围绕仓库中的 internal/codespaces/rpc/generate…

阅读更多 →
基于YOLO与SpringBoot的密集行人检测系统设计与大模型智能分析 2026/9/8 20:44:05

基于YOLO与SpringBoot的密集行人检测系统设计与大模型智能分析

做密集行人检测最让人头疼的时刻&#xff0c;不是模型精度不够&#xff0c;而是模型明明能检测出目标&#xff0c;一到真实场景&#xff08;商场扶梯口、地铁站台、景区检票口&#xff09;就各种翻车——人挤人的时候互相遮挡&#xff0c;远处的人小到只有十几个像素&#xff0…

阅读更多 →
Impeccable `bolder` 精修命令全解:在不越界的前提下放大平淡界面的设计强度 2026/9/8 20:44:05

Impeccable `bolder` 精修命令全解:在不越界的前提下放大平淡界面的设计强度

Impeccable bolder 精修命令全解&#xff1a;在不越界的前提下放大平淡界面的设计强度 【免费下载链接】impeccable The design language that makes your AI harness better at design. 项目地址: https://gitcode.com/GitHub_Trending/im/impeccable bolder 是 AI 设计…

阅读更多 →
pdf-inspector 新手指南:30秒识别PDF类型,本地快速提取文本转Markdown 2026/9/8 20:41:04

pdf-inspector 新手指南:30秒识别PDF类型,本地快速提取文本转Markdown

pdf-inspector 新手指南&#xff1a;30秒识别PDF类型&#xff0c;本地快速提取文本转Markdown 【免费下载链接】pdf-inspector Fast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smar…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞