# Find the first element that satisfy a condition in a vector

10 views (last 30 days)

Show older comments

Hello! I have a homework: if v is [1 2 3 4 5 4 3 2 1] and n is 3, it will find 4 5 and 4 because their sum of 13 is the largest of any 3 consecutive elements of v. The function returns summa, the sum as the first output argument and index, the index of the first element of the n consecutive ones as the second output.

for example

- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],3)
- summa = 13
- index = 4
- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],1)
- summa = 5
- index = 5
- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],9)
- summa = 25
- index = 1

Then I have written the code. The summa Part is correct but the index part ist wrong. index is always equal to v(k-n+1). Could someone give me some idea?

Here is the result of my code:

- max_sum([1 2 3 4 5 4 3 2 1],1)
- summa =5
- index =1

function [summa,index] = max_sum(v,n)

k = length(v);

a = zeros(1,k-n+1);

if isscalar(n) == 1 && n > 0 && n == round(n)

if n <= k

for ii = 1:(k-n+1)

b = sum(v(ii:ii+(n-1)));

a(ii) = b;

summa = max(a);

end

index = v(ii);

else

summa = 0;

index = -1;

end

else

fprintf('wrong');

end

### Accepted Answer

Andrei Bobrov
on 20 Mar 2019

Edited: Andrei Bobrov
on 20 Mar 2019

function [summa, index] = max_sum(A,n)

B = movsum(A(:),[0 n-1]);

summa = max(B);

index = find(summa == B);

end

or without movsum:

function [summa, index] = max_sum(A,n)

B = A((1:n) + (0:numel(A)-n)');

summa = max(B);

index = find(summa == B);

end

##### 1 Comment

dpb
on 20 Mar 2019

### More Answers (1)

Sritama Mitra
on 6 Sep 2020

function [summa,index]=max_sum(v,n)

k=length(v);

index=ones(1,1);

if n<=k

for i=1:(k-n+1)

b=sum(v(i:i+n-1));

a(i)=b;

summa=max(a);

end

x=find(a==summa);

[o,p]=size(x);

if p~=1

index=x(1);

else

index=x;

end

else

summa=0;

index=-1;

end

end

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!