当前位置: 首页 > news >正文

千问 LeetCode 3077. K 个不相交子数组的最大能量值 Go实现

以下是 LeetCode 3077. K 个不相交子数组的最大能量值 的 Go 语言实现:

func maximumStrength(nums []int, k int) int64 {
n := len(nums)

// 1. 计算前缀和数组,方便快速求取子数组的和
sum := make([]int64, n+1)
for i := 1; i <= n; i++ {
sum[i] = sum[i-1] + int64(nums[i-1])
}

// 2. 定义 dp 数组:dp[i][j] 表示前 j 个元素中选出 i 个不相交子数组的最大能量值
dp := make([][]int64, k+1)
for i := 0; i <= k; i++ {
dp[i] = make([]int64, n+1)
}

// 3. 动态规划填表
for i := 1; i <= k; i++ {
// 划分 i 个子数组至少需要 i 个元素,i-1 个元素无法划分,初始化为负无穷
dp[i][i-1] = -(1 << 60)
mx := int64(-(1 << 60))

// 计算当前第 i 个子数组对应的权重 w
w := int64(k - i + 1)
if i % 2 == 0 {
w = -w
}

// j 代表当前考虑的前 j 个元素,且要保证后面有足够的元素划分剩余的子数组
for j := i; j <= n - (k - i); j++ {
// 维护前缀最大值:max(dp[i-1][L] - sum[L] * w)
val := dp[i-1][j-1] - sum[j-1] * w
if val > mx {
mx = val
}
// 状态转移:不选第 j 个元素,或者以第 j 个元素结尾作为第 i 个子数组
notTake := dp[i][j-1]
take := sum[j] * w + mx
if notTake > take {
dp[i][j] = notTake
} else {
dp[i][j] = take
}
}
}

return dp[k][n]
}

Go 语言实现注意事项:
1. 数据类型:由于子数组的和以及权重乘积可能非常大,Go 中必须使用 int64 类型来存储前缀和 sum 以及 DP 状态 dp,避免整数溢出。
2. 负无穷表示:Go 中没有内置的 Long.MIN_VALUE,可以使用 -(1 << 60) 来安全地表示一个足够小的负无穷值。
3. 核心逻辑:与 Java 版本完全一致,利用前缀和与滑动窗口最大值思想,将原本 O(n^3) 的暴力枚举优化为 O(n times k) 的时间复杂度。

http://www.cnnetsun.cn/news/2820843.html

相关文章:

  • ADS2017链路预算进阶:手把手教你搞定多端口元件(如双工器、耦合器)的增益与噪声系数仿真
  • 新能源车企的零部件技术参数详解(17):转向系统技术参数
  • 告别复杂矩阵求逆:用Python手把手实现LMMSE信道估计(附QPSK/16QAM代码)
  • Android启动安全实战:手把手教你用avbtool给dtbo.img镜像签名(附完整命令)
  • 别再傻傻分不清!C/C++里int、long、long long在不同平台到底占几个字节?
  • Claude Code 100个真实案例 - 用AI自动生成Swagger API文档(告别手写文档的痛苦)
  • 山东大学软件学院项目实训进展记录8
  • AI基建狂潮下的财务危机:从Oracle裁员看技术转型的资产负债表真相
  • 计算机网络(3) -- socket网络通信
  • 手把手教你用C语言实现SM4国密算法(仅需stdio.h,附完整可运行代码)
  • 三、Vue3 模板语法
  • 【Java 入门 Day10】多态|java整活天花板,一个父类变量拿捏全子类,抽象玩法全解析开篇前言(下)
  • 保姆级避坑指南:SAP SPRO中给公司代码分配采购组织,新手最容易搞混的几点
  • 创维E900V21C救砖记:从TTL跑码异常到飞线修复,手把手教你排查硬件短路
  • 别再搞混了!Android布局中margin和padding的实战避坑指南(附ConstraintLayout案例)
  • 从Wireshark GUI到命令行:在无图形界面的CentOS 7服务器上,用tshark抓取并分析HTTP请求的完整流程
  • 告别环境冲突:用PyCharm 2023.1创建项目时,如何正确选择并配置Python 3.10解释器?
  • 别再死记硬背了!用Proteus 8 Professional玩转51单片机:LED闪烁、按键检测、数码管显示一站式仿真
  • OpenGL ES开发避坑:为什么你的GLM头文件包含总报错?聊聊#include的两种写法
  • 别再傻傻分不清了!设计师必懂的PS和AI核心区别与选择指南(附实战场景)
  • 基于FPGA的SPWM信号发生器完整工程(含Quartus II工程文件与实测波形验证)
  • 别再对着空白画布发愁了!用Altium Designer 18快速搞定STM32F103C8T6最小系统原理图(附完整库文件)
  • 数以轻舟Agent:做表AI智能体与普通大模型直接处理数据的区别
  • 前端直接生成带格式Excel:字体、行列宽、合并单元格全搞定
  • MyBatis-Plus CRUD 操作实战:从踩坑到真香
  • TLDR设计实战:信息过载时代的认知加速协议
  • 基于Java web的健身房会员管理系统的设计与实现
  • Galaxea G0.5 模型解析:从VLA-0到统一自回归序列的实践与思考
  • 30张实拍舰船图+XML/TXT双标注,开箱即用YOLOv5训练
  • 安装KVM服务器、使用libvirt tools工具管理虚拟机