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

【每日一题】689. 三个无重叠子数组的最大和-2023.11.19

题目:

689. 三个无重叠子数组的最大和

给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。

以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。

示例 1:

输入:nums = [1,2,1,2,6,7,5,1], k = 2
输出:[0,3,5]
解释:子数组 [1, 2], [2, 6], [7, 5] 对应的起始下标为 [0, 3, 5]。
也可以取 [2, 1], 但是结果 [1, 3, 5] 在字典序上更大。

示例 2:

输入:nums = [1,2,1,2,1,2,1,2,1], k = 2
输出:[0,2,4]

提示:

  • 1 <= nums.length <= 2 * 104
  • 1 <= nums[i] < 216
  • 1 <= k <= floor(nums.length / 3)

解答:

class Solution {public int[] maxSumOfOneSubarray(int[] nums, int k) {int[] ans = new int[1];int sum1 = 0, maxSum1 = 0;for (int i = 0; i < nums.length; ++i) {sum1 += nums[i];if (i >= k - 1) {if (sum1 > maxSum1) {maxSum1 = sum1;ans[0] = i - k + 1;}sum1 -= nums[i - k + 1];}}return ans;}
}

class Solution {public int[] maxSumOfTwoSubarrays(int[] nums, int k) {int[] ans = new int[2];int sum1 = 0, maxSum1 = 0, maxSum1Idx = 0;int sum2 = 0, maxSum12 = 0;for (int i = k; i < nums.length; ++i) {sum1 += nums[i - k];sum2 += nums[i];if (i >= k * 2 - 1) {if (sum1 > maxSum1) {maxSum1 = sum1;maxSum1Idx = i - k * 2 + 1;}if (maxSum1 + sum2 > maxSum12) {maxSum12 = maxSum1 + sum2;ans[0] = maxSum1Idx;ans[1] = i - k + 1;}sum1 -= nums[i - k * 2 + 1];sum2 -= nums[i - k + 1];}}return ans;}
}

代码:

class Solution {public int[] maxSumOfThreeSubarrays(int[] nums, int k) {int[] ans=new int[3];int sum1=0,maxSum1=0,maxSum1Idx=0;int sum2=0,maxSum12=0,maxSum12Idx1=0,maxSum12Idx2=0;int sum3=0,maxTotal=0;for(int i=2*k;i<nums.length;i++){sum1+=nums[i-2*k];sum2+=nums[i-k];sum3+=nums[i];if(i>=3*k-1){if(sum1>maxSum1){maxSum1=sum1;maxSum1Idx=i-3*k+1;}if(maxSum1+sum2>maxSum12){maxSum12=maxSum1+sum2;maxSum12Idx1=maxSum1Idx;maxSum12Idx2=i-2*k+1;}if(maxSum12+sum3>maxTotal){maxTotal=maxSum12+sum3;ans[0]=maxSum12Idx1;ans[1]=maxSum12Idx2;ans[2]=i-k+1;}sum1-=nums[i-3*k+1];sum2-=nums[i-2*k+1];sum3-=nums[i-k+1];}}return ans;}
}

结果:

http://www.lryc.cn/news/236352.html

相关文章:

  • “开源 vs. 闭源:大模型的未来发展趋势预测“——探讨大模型未来的发展方向
  • 计算机网络——物理层-信道的极限容量(奈奎斯特公式、香农公式)
  • 【算法挨揍日记】day31——673. 最长递增子序列的个数、646. 最长数对链
  • Jmeter做接口测试
  • 第14届蓝桥杯青少组python试题解析:23年5月省赛
  • SpringCloud 微服务全栈体系(十四)
  • 【开题报告】基于微信小程序的个人健康管理系统的设计与实现
  • Swagger笔记
  • 数据结构 堆
  • 将 ONLYOFFICE 文档编辑器与 Node.js 应用集成
  • CentOS 7搭建Gitlab流程
  • Idea安装完成配置
  • 超详细~25考研规划~感恩现在努力的你!!!
  • 智慧城市安全监控的新利器
  • 【算法】石子合并(区间dp)
  • C++-特殊类和单例模式
  • 【开源】基于Vue.js的智能教学资源库系统
  • C语言之qsort()函数的模拟实现
  • 数字化未来:实时云渲染在智慧城市中的创新应用
  • Go语言常用命令详解(二)
  • ChatGPT 从零到一打造私人智能英语学习助手
  • 算法升级之路(七)-盛最多水的容器
  • milvus数据库索引管理
  • JVM中的 -Xms参数 设置 JVM 的初始堆大小
  • Idea 创建 Spring 项目(保姆级)
  • C++多线程学习(一):C++11 多线程快速入门
  • Linux系统之lsof命令的基本使用
  • 性能压力测试的优势与重要性
  • AtCoder Beginner Contest 329 题解A~F
  • Windows网络「SSL错误问题」及解决方案