DeepSeek    LeetCode 3430. 最多 K 个元素的子数组的最值之和 Java实现
LeetCode 3430. 最多 K 个元素的子数组的最值之和题目分析给定一个整数数组 nums 和一个整数 k需要找出所有长度不超过 k 的连续子数组中最大值和最小值之和的总和。解题思路核心思想对于每个元素计算它作为最大值和最小值时对答案的贡献次数。关键步骤1. 计算作为最大值的贡献· 找到每个元素左边第一个大于它的元素位置· 找到每个元素右边第一个大于等于它的元素位置处理重复元素· 计算以该元素为最大值的子数组数量且长度 ≤ k2. 计算作为最小值的贡献· 找到每个元素左边第一个小于它的元素位置· 找到每个元素右边第一个小于等于它的元素位置处理重复元素· 计算以该元素为最小值的子数组数量且长度 ≤ k3. 答案 最大值贡献总和 最小值贡献总和时间复杂度· O(n)使用单调栈Java实现javaclass Solution {public long minMaxSubarraySum(int[] nums, int k) {int n nums.length;long ans 0;// 计算作为最大值的贡献int[] leftGreater new int[n];int[] rightGreaterEqual new int[n];DequeInteger stack new ArrayDeque();// 左边第一个大于当前元素的索引for (int i 0; i n; i) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}leftGreater[i] stack.isEmpty() ? -1 : stack.peek();stack.push(i);}stack.clear();// 右边第一个大于等于当前元素的索引for (int i n - 1; i 0; i--) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}rightGreaterEqual[i] stack.isEmpty() ? n : stack.peek();stack.push(i);}// 计算最大值的贡献for (int i 0; i n; i) {int left i - leftGreater[i];int right rightGreaterEqual[i] - i;ans (long) nums[i] * countSubarrays(left, right, k);}// 计算作为最小值的贡献int[] leftSmaller new int[n];int[] rightSmallerEqual new int[n];stack.clear();// 左边第一个小于当前元素的索引for (int i 0; i n; i) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}leftSmaller[i] stack.isEmpty() ? -1 : stack.peek();stack.push(i);}stack.clear();// 右边第一个小于等于当前元素的索引for (int i n - 1; i 0; i--) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}rightSmallerEqual[i] stack.isEmpty() ? n : stack.peek();stack.push(i);}// 计算最小值的贡献for (int i 0; i n; i) {int left i - leftSmaller[i];int right rightSmallerEqual[i] - i;ans (long) nums[i] * countSubarrays(left, right, k);}return ans;}// 计算在 left × right 的网格中包含当前元素且长度 ≤ k 的子数组数量private long countSubarrays(int left, int right, int k) {long total 0;// 枚举左边取 x 个右边取 y 个满足 x y 1 ≤ k// x ∈ [0, left-1], y ∈ [0, right-1]int maxX Math.min(left - 1, k - 1);int maxY Math.min(right - 1, k - 1);// 使用数学公式计算for (int x 0; x maxX; x) {int remain k - 1 - x;int yLimit Math.min(maxY, remain);if (yLimit 0) {total (yLimit 1);}}return total;}}优化版本使用前缀和优化 countSubarraysACjavaclass Solution {public long minMaxSubarraySum(int[] nums, int k) {int n nums.length;long ans 0;// 计算最大值的贡献int[] leftGreater new int[n];int[] rightGreaterEqual new int[n];DequeInteger stack new ArrayDeque();for (int i 0; i n; i) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}leftGreater[i] stack.isEmpty() ? -1 : stack.peek();stack.push(i);}stack.clear();for (int i n - 1; i 0; i--) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}rightGreaterEqual[i] stack.isEmpty() ? n : stack.peek();stack.push(i);}for (int i 0; i n; i) {int left i - leftGreater[i];int right rightGreaterEqual[i] - i;ans (long) nums[i] * countSubarraysOptimized(left, right, k);}// 计算最小值的贡献int[] leftSmaller new int[n];int[] rightSmallerEqual new int[n];stack.clear();for (int i 0; i n; i) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}leftSmaller[i] stack.isEmpty() ? -1 : stack.peek();stack.push(i);}stack.clear();for (int i n - 1; i 0; i--) {while (!stack.isEmpty() nums[stack.peek()] nums[i]) {stack.pop();}rightSmallerEqual[i] stack.isEmpty() ? n : stack.peek();stack.push(i);}for (int i 0; i n; i) {int left i - leftSmaller[i];int right rightSmallerEqual[i] - i;ans (long) nums[i] * countSubarraysOptimized(left, right, k);}return ans;}// 优化版本使用数学公式 O(1) 计算private long countSubarraysOptimized(int left, int right, int k) {long l Math.min(left, k);long r Math.min(right, k);if (l 0 || r 0) return 0;// 计算所有可能的 (x, y) 对数其中 x ∈ [0, l-1], y ∈ [0, r-1], x y ≤ k-1long total 0;long maxSum k - 1;if (l r - 2 maxSum) {// 所有组合都满足return l * r;}// 分情况计算// 情况1: x 较小y 可以取全部for (long x 0; x l x maxSum; x) {long yMax Math.min(r - 1, maxSum - x);if (yMax 0) {total yMax 1;}}return total;}}关键点说明1. 单调栈的使用用单调栈找到每个元素作为最值的边界2. 处理重复元素使用 和 的不同组合来避免重复计算3. 长度限制 k在计算子数组数量时需要限制左右扩展的总长度不超过 k4. 数据类型使用 long 避免整数溢出这个解法的时间复杂度为 O(n)空间复杂度为 O(n)。

相关新闻

告别网盘限速:9大平台直链下载助手全方位指南

告别网盘限速:9大平台直链下载助手全方位指南

告别网盘限速:9大平台直链下载助手全方位指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…

2026/6/29 8:48:16阅读更多 →
FakeLocation终极指南:三步掌握Android位置模拟的完整教程

FakeLocation终极指南:三步掌握Android位置模拟的完整教程

FakeLocation终极指南:三步掌握Android位置模拟的完整教程 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾经想过在手机上轻松切换自己的地理位置&#xff1f…

2026/6/29 8:48:16阅读更多 →
基于HarmonyOS 7.0 跨端开发的随机写作灵感生成器页面实战

基于HarmonyOS 7.0 跨端开发的随机写作灵感生成器页面实战

基于HarmonyOS 7.0 跨端开发的随机写作灵感生成器页面实战 前言 创意激发类应用的妙处,在于用随机组合打破思维定式,给用户带来意想不到的灵感火花。写作灵感生成器就是典型:它把"人物 场景 冲突"三个维度随机组合,生…

2026/6/29 8:43:15阅读更多 →
用开源力量重塑你的游戏修改体验:Wand-Enhancer全面解析

用开源力量重塑你的游戏修改体验:Wand-Enhancer全面解析

用开源力量重塑你的游戏修改体验:Wand-Enhancer全面解析 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在寻找一个既安全又强大的游戏修改…

2026/6/29 10:08:50阅读更多 →
告别APA格式噩梦:3分钟为Word安装第7版参考文献样式

告别APA格式噩梦:3分钟为Word安装第7版参考文献样式

告别APA格式噩梦:3分钟为Word安装第7版参考文献样式 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为APA格式调整而烦恼吗&#xff1f…

2026/6/29 10:08:50阅读更多 →
*存储媒体**(Storage Media):指用于保存和读取数据的物理介质,是计算机系统中实现数据持久化或临时缓存的关键组成部分

*存储媒体**(Storage Media):指用于保存和读取数据的物理介质,是计算机系统中实现数据持久化或临时缓存的关键组成部分

存储媒体(Storage Media):指用于保存和读取数据的物理介质,是计算机系统中实现数据持久化或临时缓存的关键组成部分。分类依据通常包括: 是否可移动(如U盘、光盘 vs 内置硬盘)是否易失性&#x…

2026/6/29 10:08:50阅读更多 →
超简单!单 Bash 脚本实现博客创建,多特性持续更新维护

超简单!单 Bash 脚本实现博客创建,多特性持续更新维护

导航菜单切换导航,有登录选项,还可进行外观设置。平台功能涵盖 AI 代码生成、开发者工作流、应用程序安全、探索等方面。AI 代码生成包括 GitHub Copilot、GitHub Copilot 应用、MCP 注册表;开发者工作流有 Actions、Codespaces、Issues、代码…

2026/6/29 10:08:50阅读更多 →
从原理到实践:深入解析音频3A算法如何重塑清晰通话

从原理到实践:深入解析音频3A算法如何重塑清晰通话

1. 音频3A算法:通话清晰度的幕后英雄 你有没有遇到过这样的场景?在线会议时同事那边传来刺耳的回声,直播连麦时背景的键盘声吵得听不清说话,或是智能客服电话里对方声音忽大忽小。这些困扰我们日常通信的"声音污染"&…

2026/6/29 10:08:50阅读更多 →
STM32G4与DRV8353S的SPI通信实战:寄存器配置与电机驱动优化

STM32G4与DRV8353S的SPI通信实战:寄存器配置与电机驱动优化

1. DRV8353S电机驱动芯片深度解析 DRV8353S是德州仪器(TI)推出的一款高性能三相无刷直流电机门驱动器,专为工业级电机控制应用设计。我第一次接触这颗芯片是在开发一款无人机电调时,当时就被它高度集成的特性所吸引。相比传统方案需要多个分立元件搭建驱…

2026/6/29 10:03:50阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中的纹理制作而烦恼吗?…

2026/6/29 0:01:47阅读更多 →
OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单! 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCA…

2026/6/29 0:01:47阅读更多 →
终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了Windows 11系统自带的20…

2026/6/29 0:01:47阅读更多 →