由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 讨论个subarray sum的变种问题
相关主题
find longest subarray with the equal number of 0's, 1's最近变硬那家的面经
INTERVIEW会假定你见过问的问题吗?careercup上这道题我竟然没看懂
考古问几道题来道难一点的题
问几道算法题问一道算法题largest subsequence sum <= max
G家onsite一题Random Array number, Find longest consecutive sequence
careercup上看的一道题问一个老数组题
上一算法面试题Rotating an array in place
问一道programming peals上的题stable rearrange an integer array with + and -
相关话题的讨论汇总
话题: maxsum话题: array话题: subvector话题: sum话题: int
进入JobHunting版参与讨论
1 (共1页)
k***e
发帖数: 556
1
input: a circular array
output: a subvector of the array that has max sum
可以想象排列在圆周上的n个元素,求连续的k个使得其和最大
我的想法是
1. take any element as the leader and break the circle into one dimensional
array a[1:n]. use the classical method to get the maxsum subvector
2. we did not consider the case that the maxsum subvector in the circle
passes a[1]. in the next step we will figure out the maxsum subvector that
passes a[1], suppose it is a[n - i:j].
3. claim: a[j+1:n-i-1] is the minsum subvector of a[1:n]. beca
w********p
发帖数: 948
2
额觉得, 这道题的关键不是array is circle or not. 因为我们只能用array来表达
circle array. circle array 只是多了几步边界问题。
搂主提到的“classical method to get the maxsum subvector“, 不知道running
time 是多少。
我的方法是 土土的将相临的K个数加起来。包括circle的情况。时间是 O(K*N), 空间
是O(N)
不知道,有没有人更好的方法
dynamic 在这道题中应该用不着吧。
g*******y
发帖数: 1930
3
1.K是一个任意的数
2.不管K是固定的,还是任意的,都只要O(N)

【在 w********p 的大作中提到】
: 额觉得, 这道题的关键不是array is circle or not. 因为我们只能用array来表达
: circle array. circle array 只是多了几步边界问题。
: 搂主提到的“classical method to get the maxsum subvector“, 不知道running
: time 是多少。
: 我的方法是 土土的将相临的K个数加起来。包括circle的情况。时间是 O(K*N), 空间
: 是O(N)
: 不知道,有没有人更好的方法
: dynamic 在这道题中应该用不着吧。

w********p
发帖数: 948
4
根据你提供的algorithm and feedback, 从写思路. one time scan
running time O(n) space O(1)
Please correct me, if logic error
//n is the array size
maxSum=-99999999;
if (k>n) return failed
for (int i=0; i startIndex=i;
endIndex= (i+k-1)% n;
//get the sum of k number from startIndex to endIndex
sum=SumKMember(startIndex, endIndex, sum);
if (sum>maxSum ) { maxSum = sum; retrunIndex=startIndex }
}
//get sum only one time scan
int SumKMember(int startIndex, int endIndex, sum) {


【在 k***e 的大作中提到】
: input: a circular array
: output: a subvector of the array that has max sum
: 可以想象排列在圆周上的n个元素,求连续的k个使得其和最大
: 我的想法是
: 1. take any element as the leader and break the circle into one dimensional
: array a[1:n]. use the classical method to get the maxsum subvector
: 2. we did not consider the case that the maxsum subvector in the circle
: passes a[1]. in the next step we will figure out the maxsum subvector that
: passes a[1], suppose it is a[n - i:j].
: 3. claim: a[j+1:n-i-1] is the minsum subvector of a[1:n]. beca

H*M
发帖数: 1268
5
呼吁geniusxsy出手
刚实现了下,发现远比我想象的要难.
在classical 非circular array的那个问题上改的
但是复杂了许多.还出错....
please test: 1 2 4 -3 5 2
should return 14, not 11.

【在 g*******y 的大作中提到】
: 1.K是一个任意的数
: 2.不管K是固定的,还是任意的,都只要O(N)

l*******r
发帖数: 511
6
duplicate the array

【在 H*M 的大作中提到】
: 呼吁geniusxsy出手
: 刚实现了下,发现远比我想象的要难.
: 在classical 非circular array的那个问题上改的
: 但是复杂了许多.还出错....
: please test: 1 2 4 -3 5 2
: should return 14, not 11.

H*M
发帖数: 1268
7
没用的
我的思想就是duplicate the array
你implement看看就知道了

【在 l*******r 的大作中提到】
: duplicate the array
w********p
发帖数: 948
8
code is here, I run it simply, it looks good
O(n) for running time, and O(1) for space
#include
#include
#include
using namespace std;
int SumKMember(int iArray[],int startIndex, int endIndex, int sum);
int main (int argc, char *args[]) {
if (argc != 2) {
cout<<"comment line: a.exe number\n";
return 0;
}
int k=atoi(args[1]);
//n is the array size
int maxSum=-99999999;

int iArray[] = {1, 2 , 4 , -3, 5 ,2};
int n = sizeof( iArray) /sizeof
g*******y
发帖数: 1930
9
这题的题意应该是,找一段长度任意的子数组使得和最大,k不是一个给定的参数。

【在 w********p 的大作中提到】
: code is here, I run it simply, it looks good
: O(n) for running time, and O(1) for space
: #include
: #include
: #include
: using namespace std;
: int SumKMember(int iArray[],int startIndex, int endIndex, int sum);
: int main (int argc, char *args[]) {
: if (argc != 2) {
: cout<<"comment line: a.exe number\n";

l***i
发帖数: 632
10
enn...Your solution is correct.

dimensional
[j

【在 k***e 的大作中提到】
: input: a circular array
: output: a subvector of the array that has max sum
: 可以想象排列在圆周上的n个元素,求连续的k个使得其和最大
: 我的想法是
: 1. take any element as the leader and break the circle into one dimensional
: array a[1:n]. use the classical method to get the maxsum subvector
: 2. we did not consider the case that the maxsum subvector in the circle
: passes a[1]. in the next step we will figure out the maxsum subvector that
: passes a[1], suppose it is a[n - i:j].
: 3. claim: a[j+1:n-i-1] is the minsum subvector of a[1:n]. beca

相关主题
careercup上看的一道题最近变硬那家的面经
上一算法面试题careercup上这道题我竟然没看懂
问一道programming peals上的题来道难一点的题
进入JobHunting版参与讨论
l***i
发帖数: 632
11

dynamic programming...in linear time

【在 w********p 的大作中提到】
: code is here, I run it simply, it looks good
: O(n) for running time, and O(1) for space
: #include
: #include
: #include
: using namespace std;
: int SumKMember(int iArray[],int startIndex, int endIndex, int sum);
: int main (int argc, char *args[]) {
: if (argc != 2) {
: cout<<"comment line: a.exe number\n";

w********p
发帖数: 948
12
这要是我的面试题, 就这样fail了。 :(

【在 g*******y 的大作中提到】
: 这题的题意应该是,找一段长度任意的子数组使得和最大,k不是一个给定的参数。
H*M
发帖数: 1268
13
有O(1) space的
我说的是非circular

【在 l***i 的大作中提到】
:
: dynamic programming...in linear time

g*******y
发帖数: 1930
14
呵呵,不是你的错,怪krone转述的题目误导你了,呵呵

【在 w********p 的大作中提到】
: 这要是我的面试题, 就这样fail了。 :(
H*M
发帖数: 1268
15
不过可以考虑设定k, 另外一道面试题
呵呵

【在 g*******y 的大作中提到】
: 呵呵,不是你的错,怪krone转述的题目误导你了,呵呵
m*****f
发帖数: 1243
16
那数组里应该还有负数, 要不然和最大得数组当然是长度=n...
这个题总体来说题意不太清楚, 一般如果面试题要考虑负数的话, 肯定会说明

【在 g*******y 的大作中提到】
: 这题的题意应该是,找一段长度任意的子数组使得和最大,k不是一个给定的参数。
m*****f
发帖数: 1243
17
设定k求最大连续和? 那不是太容易了吗?

【在 H*M 的大作中提到】
: 不过可以考虑设定k, 另外一道面试题
: 呵呵

l***i
发帖数: 632
18
...the standard dynamic programming can be implemented with O(1) extra space
...
The equation is
f(i) = max(a_i, f(i-1)+a_i)...
Hence at any time you need only f(i-1)...

【在 H*M 的大作中提到】
: 有O(1) space的
: 我说的是非circular

H*M
发帖数: 1268
19
ok,we are talking about the same thing
usually when we talk about DP, i am thinking of extra space
space
H*M
发帖数: 1268
20
请5分钟内写对 :)

【在 m*****f 的大作中提到】
: 设定k求最大连续和? 那不是太容易了吗?
相关主题
问一道算法题largest subsequence sum <= maxRotating an array in place
Random Array number, Find longest consecutive sequencestable rearrange an integer array with + and -
问一个老数组题谁有兴趣做道题?
进入JobHunting版参与讨论
H*M
发帖数: 1268
21
原楼主的方法好像是对的
现算一个maxconsum,再算minconsum(对非circular),再用sum-minconsum,比谁大
没想到有什么不妥的地方。 好像也能用同样的方法算minconsum..

【在 l***i 的大作中提到】
: enn...Your solution is correct.
:
: dimensional
: [j

w********p
发帖数: 948
22
俺嘬觉得O(1)space 还是可以的
1。 先说说普通non-circle array. 可以用非dynamic programing O(n)runing time,
O(1) space 。 关键是sum<0时,就drop, goto next
2. circle array, 向楼上说的在负数那段开,记住当前maxSum开始的 index,
计算到end of array 时继续,一直到one element before 当前maxSum开始的 index
ex1: -3, 5, 2, 1, 4, => 一只计算到5, 2, 1, 4, -3 got solution 5, 2, 1 , 4
ex2: −2, 1, −3, 4, −1, 2, 1, −2, 4 => 当前maxSum开始
4, −1, 2, 1, −2, 4, -2, 1, -3 got solution 4, -1, 2, 1, -2, 4
H*M
发帖数: 1268
23
我觉得楼主本来的idea就很好
至少我还没看出破绽

,
4

【在 w********p 的大作中提到】
: 俺嘬觉得O(1)space 还是可以的
: 1。 先说说普通non-circle array. 可以用非dynamic programing O(n)runing time,
: O(1) space 。 关键是sum<0时,就drop, goto next
: 2. circle array, 向楼上说的在负数那段开,记住当前maxSum开始的 index,
: 计算到end of array 时继续,一直到one element before 当前maxSum开始的 index
: ex1: -3, 5, 2, 1, 4, => 一只计算到5, 2, 1, 4, -3 got solution 5, 2, 1 , 4
: ex2: −2, 1, −3, 4, −1, 2, 1, −2, 4 => 当前maxSum开始
: 4, −1, 2, 1, −2, 4, -2, 1, -3 got solution 4, -1, 2, 1, -2, 4

w********p
发帖数: 948
24
高度同意
我只是在丢脸后,试图找点回来

【在 H*M 的大作中提到】
: 我觉得楼主本来的idea就很好
: 至少我还没看出破绽
:
: ,
: 4

H*M
发帖数: 1268
25
mm不要自责
前进让梦更近
-Toyota

【在 w********p 的大作中提到】
: 高度同意
: 我只是在丢脸后,试图找点回来

k***e
发帖数: 556
26
晕 我贴了很长时间没人理
有mm(或貌似mm id)的回帖就立马一堆人回
看来弄个马甲很有必要
ps,我以为人人都知道给定 one dim array,找连续的sub array使得和最大
:)因为在programming pearl和许多算法课的作业里出现过
结果。。。
再次推荐没有读过 变成珍珠 读下这本书

【在 w********p 的大作中提到】
: 高度同意
: 我只是在丢脸后,试图找点回来

s*x
发帖数: 3328
27
no, it is f(i) = max(a_i, f(i-1)+a_i, f(i-1))
and sure it is linear time algorithm no matter whether the array is circular
or not. the circular case can be treated as array. not so precisely
speaking:
a b c d - circular case is ALMOST equivalent to solve a b c d a b c d - non-
circular, since any factor of the circular word is a factor of that normal
word.

space

【在 l***i 的大作中提到】
: ...the standard dynamic programming can be implemented with O(1) extra space
: ...
: The equation is
: f(i) = max(a_i, f(i-1)+a_i)...
: Hence at any time you need only f(i-1)...

l***i
发帖数: 632
28

Obviously you shouldn't do that...
You may connect disconnected pieces by adding f(i-1) there...
It's true that you need an O(n) scan to return max f(i) as the final answer.
..

【在 s*x 的大作中提到】
: no, it is f(i) = max(a_i, f(i-1)+a_i, f(i-1))
: and sure it is linear time algorithm no matter whether the array is circular
: or not. the circular case can be treated as array. not so precisely
: speaking:
: a b c d - circular case is ALMOST equivalent to solve a b c d a b c d - non-
: circular, since any factor of the circular word is a factor of that normal
: word.
:
: space

l***i
发帖数: 632
29
enn... minsum(a1,...,an) = -maxsum(-a1,...,-an)...
This is just theoretical analysis (re-using an existing argument always
keeps proofs simple) -- One needn't implement it in this way though...

【在 H*M 的大作中提到】
: 原楼主的方法好像是对的
: 现算一个maxconsum,再算minconsum(对非circular),再用sum-minconsum,比谁大
: 没想到有什么不妥的地方。 好像也能用同样的方法算minconsum..

1 (共1页)
进入JobHunting版参与讨论
相关主题
stable rearrange an integer array with + and -G家onsite一题
谁有兴趣做道题?careercup上看的一道题
一道算法题,N*N array里最大的subarray上一算法面试题
[算法] unsorted array问一道programming peals上的题
find longest subarray with the equal number of 0's, 1's最近变硬那家的面经
INTERVIEW会假定你见过问的问题吗?careercup上这道题我竟然没看懂
考古问几道题来道难一点的题
问几道算法题问一道算法题largest subsequence sum <= max
相关话题的讨论汇总
话题: maxsum话题: array话题: subvector话题: sum话题: int