当前位置:网站首页>689. 三个无重叠子数组的最大和
689. 三个无重叠子数组的最大和
2022-08-03 23:01:00 【小卢要刷力扣题】
前言
给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。
以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-sum-of-3-non-overlapping-subarrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
一、解题思路
help数组
help[1]:子数组必须以1位置数结尾情况下,累加和怎么最好
第一种可能性:只包含-5
第二种可能性: -5决定往左扩
help的含义是子数组必须以0位置的数结尾的情况下最好收益是啥?
子数组必须以1位置的数结尾的情况下最好收益是啥?
子数组必须以2位置的数结尾的情况下最好收益是啥?
…
然后利用help数组求dp数组
dp数组
dp[0]: 0~0范围上随意选,累加和怎么最好
dp[1]:
子数组必须以1结尾,最好收益是-2
子数组不以1位置结尾情况下怎么最好,就是之前的答案3
两种可能性求最大值
dp[i]: 0~i范围上随意选,子数组的累加和怎么最好
public static int maxSumLenK(int[] arr, int k) {
int N = arr.length;
// 子数组必须以i位置的数结尾,长度一定要是K,累加和最大是多少?
// help[0] help[k-2] ...
int sum = 0;
for (int i = 0; i < k - 1; i++) {
sum += arr[i];
}
// 0...k-2 k-1 sum
int[] help = new int[N];
for (int i = k - 1; i < N; i++) {
// 0..k-2
// 01..k-1
sum += arr[i];
help[i] = sum;
// i == k-1
sum -= arr[i - k + 1];
}
// help[i] - > dp[i] 0-..i K
}
原问题题解
原问题:必须选3个非空子数组,长度一定是K, 无重合,累加和最大.
整个数组从左往右遍历生成dp数组
再从右往左生成dp数组: i~N-1范围上,如果只选一个子数组… 累加和怎么最大
让L到R的距离为K,L…R是中间的子数组,k=3
问题变为中间数组必须是3~ 5的话,0~ 2范围和6~12范围上怎么选一个子数组最好,
左右两边的信息直接查表可以得到
第一回, L来到3, R来到5,我们查0~ 2
0-12范围上K-定是长度为3的数组,有那些可能性
1)就是10.11,12三个数组成的子数组.
2)子数组不以12结尾就是0-11范围上选K个在0~12范围上
就怎么选K个
代码
class Solution {
public int[] maxSumOfThreeSubarrays(int[] nums, int k) {
int n=nums.length;
int[] range=new int[n];
int[] left=new int[n];
int sum=0;
for(int i=0;i<k;i++){
sum+=nums[i];
}
range[0]=sum;
left[k-1]=0;
int max=sum;
for(int i=k;i<n;i++){
sum = sum - nums[i - k] + nums[i];
range[i - k + 1] = sum;
left[i] = left[i - 1];
if (sum > max) {
max = sum;
left[i] = i - k + 1;
}
}
sum=0;
for(int i=n-1;i>=n-k;i--){
sum+=nums[i];
}
max=sum;
int[] right=new int[n];
right[n-k]=n-k;
for(int i=n-k-1;i>=0;i--){
sum=sum-nums[i+k]+nums[i];
right[i]=right[i+1];
if(sum>=max){
max=sum;
right[i]=i
; }
}
int a=0;
int b=0;
int c=0;
max=0;
for(int i=k;i<n-2*k+1;i++){
int part1=range[left[i-1]];
int part2=range[i];
int part3=range[right[i+k]];
if(part1+part2+part3>max){
max = part1 + part2 + part3;
a = left[i - 1];
b = i;
c = right[i + k];
}
}
return new int[] {
a, b, c };
}
}
边栏推荐
- 用两个栈模拟队列
- .NET6之MiniAPI(十四):跨域CORS(上)
- 栈的压入、弹出序列
- Redis persistence method
- With 4 years of work experience, the 5 communication methods between multi-threads can't be said, can you believe it?
- for loop exercises
- FinClip,助长智能电视更多想象空间
- node连接mysql数据库报错:Client does not support authentication protocol requested by server
- override learning (parent and child)
- MCS-51单片机,定时1分钟,汇编程序
猜你喜欢
[Paper Reading] TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve
CAS: 178744-28-0, mPEG-DSPE, DSPE-mPEG, methoxy-polyethylene glycol-phosphatidylethanolamine supply
Bytebase database schema change management tool
Fluorescein-PEG-CLS, cholesterol-polyethylene glycol-fluorescein scientific research reagent
Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D 论文笔记
【day6】类与对象、封装、构造方法
最小化安装debian11
Software testing is seriously involution, how to improve your competitiveness?
First domestic open source framework 】 【 general cloud computing framework, any program can be made into cloud computing.
Republish the lab report
随机推荐
2022-08-03 Oracle executes slow SQL-Q17 comparison
override learning (parent and child)
七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间
win10系统下yolov5-V6.1版本的tensorrt部署细节教程及bug修改
一个函数有多少种调用方式?
rosbridge-WSL2 && carla-win11
CAS: 178744-28-0, mPEG-DSPE, DSPE-mPEG, methoxy-polyethylene glycol-phosphatidylethanolamine supply
The salary of soft testers at each stage, come to Kangkang, how much can you get?
ML's yellowbrick: A case of interpretability (threshold map) for LoR logistic regression model using yellowbrick based on whether Titanic was rescued or not based on the two-class prediction dataset
UVa 10003 - Cutting Sticks (White Book, Interval DP)
Creo 9.0二维草图的诊断:着色封闭环
Scala基础【正则表达式、框架式开发原则】
(PC+WAP)织梦模板不锈钢类网站
FinClip,助长智能电视更多想象空间
ML之yellowbrick:基于titanic泰坦尼克是否获救二分类预测数据集利用yellowbrick对LoR逻辑回归模型实现可解释性(阈值图)案例
V8中的快慢数组(附源码、图文更易理解)
Scala basics [regular expressions, framework development principles]
逆波兰表达式求值
[N1CTF 2018] eating_cms
[MySQL Advanced] Creation and Management of Databases and Tables