Finding the max sum of the sub arrays.
5 次查看(过去 30 天)
显示 更早的评论
Having a vector a, that contains sub arrays of 4 elements (their amount is unknown), knowing their starting indices in a and ending indices in a in two vectors=
start=[y1 y2 y3.....]
end=[x1 x2 x3.....]
(yet, we don't know how much sub arrays we get, so the length of the start/end vector is unknown, but they are equal). We need to create the vector of the sums like following: sums=[sum(a((y1):(x1))) sum(a((y2):(x2))) ....] and then find the max sum (that's an easy part).
for example:
a=[7 2 6 14 30 15 12 0 20 21 300 67]
start=[2 8]
end=[5 11]
sums=[52 341]
How can we write the code for the general problem?
Only these functions are allowed :
min , max , sum , find , any , all , isempty , sort, length
I can't figure it out without using the matrices, which is forbidden. Any ideas?
采纳的回答
Valeria
2014-12-6
1 个评论
Image Analyst
2014-12-6
You managed to create an error, not solve the problem. Even if you fix the variable names, it's not right because you're not even involving the "a" in any way. Here's your code
a=[7 2 6 14 30 15 12 0 20 21 300 67]
starting=[2 8]
ending=[5 11]
desiredSums=[52 341] % What you want to get
% Now your code:
% Create two helper arrays
ind2=starting+1;
ind3=starting+2;
% So the sum vector will be:
sums=starting+ind2+ind3+ending
And here's the output
desiredSums =
52 341
sums =
14 38
As you can see, your sums do not produce the desired result.
更多回答(3 个)
Image Analyst
2014-12-5
Valeria: You simply need to give an index to the sums vector and put that index into the "a" array inside the sum function.
a=[7 2 6 14 30 15 12 0 20 21 300 67]
startingIndexes = [2, 8]
endingIndexes = [5, 11]
for k = 1 : length(startingIndexes)
sums(k) = sum(a( you do this part) )
end
Inside you simply need to give the starting and ending indexes as a function of k. Trivial - I think you can do that part.
Andrei Bobrov
2014-12-6
编辑:Andrei Bobrov
2014-12-6
a=[7 2 6 14 30 15 12 0 20 21 300 67];
start=[2 8];
end1 =[5 11];
a1 = cumsum(a);
out = diff(a1([start;end1]))+a(start);
1 个评论
Image Analyst
2014-12-6
编辑:Image Analyst
2014-12-6
She already told Matt that she could not use the cumsum() function. And told me that she can't use loops (so that makes it almost impossible to do a cumsum manually). Apparently her professor found a trick where it is possible to get the answer using only the functions min , max , sum , find , any , all , isempty , sort, length , and no matrices (2-D arrays) and no loops of any kind . I'm stumped.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!