由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 关于Leetcode Maximum Subarray 的变种问题
相关主题
请教一下leetcode #321. Create Maximum NumberMaximum Contiguous Subarray
Leetcode 689居然是fb的高频题?INTERVIEW会假定你见过问的问题吗?
请大牛解释一下leetcode新题programming pears上的maximum subarray算法是不是有小bug?
报个L家店面面经,求onsite bless求 Maximum Subarray divide and conquer 解法
Leetcode Kth largest新题gas station,做出来了却没想通
问问题,0/1 矩阵内最大1矩阵的问题leetcode Maximum Product Subarray如果是 double 的怎么做, 假设 测试数据没有 误差
一道二叉树的题这道算法题follow-up让所有人都跪了,你会做吗?
贡献一个最近电面题目每次刷题都有新发现
相关话题的讨论汇总
话题: nums话题: sum话题: subarray话题: int话题: dp
进入JobHunting版参与讨论
1 (共1页)
h********8
发帖数: 1
1
请教Leetcode Maximum Subarray 如果加两个条件,怎么解:
1. 打印Start和End,这个比较容易。
2. 返回的Subarray的长度要大于1。(追问如果是大于N呢?)
以下是我的大于1的code,各位有没有更好的解法?
public int maxSubWithSizeGreaterThanOne(int[] nums) {
if (nums.length < 2) {
return 0;
}
int maxStart = 0;
int maxEnd = 1;
int start = 0;
int sum = nums[0] + nums[1];
int max = sum;
for (int i=2; i sum = Math.max(sum+nums[i], nums[i-1]+nums[i]);
if (sum == nums[i-1]+nums[i]) {
start = i-1;
}
max = Math.max(max, sum);
if (max == sum) {
maxStart = start;
maxEnd = i;
}
}
System.out.println("start and end are " + maxStart + " " + maxEnd);
return max;
}
b*****n
发帖数: 618
2
可以继续用DP吧,加个维度就好,subarray的长度
m******3
发帖数: 346
3
这个DP怎么写呢?
定义dp[i][j]为以nums[i]结尾的长度为j的subArray长度
dp[i][1] = nums[i]
dp[i][j] = (dp[i-1][j-1]+nums[i]) if dp[i-1][j-1]!=0;
dp[i][j] = 0; if dp[i-1][j-1]=0
是这样么 ?
b*****n
发帖数: 618
4
貌似也不用。。
只要算一下每个长度为n的以nums[i]结尾的最大值,然后dp长度为>=n的以nums[i]结尾
的最大值就行了,这样线性就能解决。
最开始的largest subarray sum其实是n==1的一种特殊情况,做法是完全一样的。

【在 m******3 的大作中提到】
: 这个DP怎么写呢?
: 定义dp[i][j]为以nums[i]结尾的长度为j的subArray长度
: dp[i][1] = nums[i]
: dp[i][j] = (dp[i-1][j-1]+nums[i]) if dp[i-1][j-1]!=0;
: dp[i][j] = 0; if dp[i-1][j-1]=0
: 是这样么 ?

m******3
发帖数: 346
5


【在 b*****n 的大作中提到】
: 貌似也不用。。
: 只要算一下每个长度为n的以nums[i]结尾的最大值,然后dp长度为>=n的以nums[i]结尾
: 的最大值就行了,这样线性就能解决。
: 最开始的largest subarray sum其实是n==1的一种特殊情况,做法是完全一样的。

m******3
发帖数: 346
6
没有太明白,算一下每个长度为n的以nums[i]结尾的最大值,如何线性解决?
也是DP么? 另外我觉得和n=1的情况还是有区别的啊,如果subarray是从nums[i]开始
而不是在已经有的subArray上加上nums[i],对n=1的情况没问题,nums[i]本身就保证了
长度至少大于等于1,但是如果n!=1,这个没办法保证吧,能详细说说么?

【在 b*****n 的大作中提到】
: 貌似也不用。。
: 只要算一下每个长度为n的以nums[i]结尾的最大值,然后dp长度为>=n的以nums[i]结尾
: 的最大值就行了,这样线性就能解决。
: 最开始的largest subarray sum其实是n==1的一种特殊情况,做法是完全一样的。

b*****n
发帖数: 618
7

这是个sliding window吧
sum[i]表示nums[i]结尾的长度为n的subarray sum
sum[i] = sum[i - 1] - nums[i - n] + nums[i]
dp[i]表示nums[i]结尾的长度>=n的subarray sum最大值
dp[i] = max(sum[i], dp[i - 1] + nums[i])

【在 m******3 的大作中提到】
: 没有太明白,算一下每个长度为n的以nums[i]结尾的最大值,如何线性解决?
: 也是DP么? 另外我觉得和n=1的情况还是有区别的啊,如果subarray是从nums[i]开始
: 而不是在已经有的subArray上加上nums[i],对n=1的情况没问题,nums[i]本身就保证了
: 长度至少大于等于1,但是如果n!=1,这个没办法保证吧,能详细说说么?

m******3
发帖数: 346
8
明白了,多谢beanbun!
1 (共1页)
进入JobHunting版参与讨论
相关主题
每次刷题都有新发现Leetcode Kth largest
Maximum Sum of Increasing Sequence问问题,0/1 矩阵内最大1矩阵的问题
回馈本版--报告一些最近的面筋一道二叉树的题
现在流行打电话据人么?只是电面贡献一个最近电面题目
请教一下leetcode #321. Create Maximum NumberMaximum Contiguous Subarray
Leetcode 689居然是fb的高频题?INTERVIEW会假定你见过问的问题吗?
请大牛解释一下leetcode新题programming pears上的maximum subarray算法是不是有小bug?
报个L家店面面经,求onsite bless求 Maximum Subarray divide and conquer 解法
相关话题的讨论汇总
话题: nums话题: sum话题: subarray话题: int话题: dp