替换已排序数组中偶数位置的数字

时间:2015-10-08 09:49:29

标签: arrays algorithm matlab sorting

我有一个按升序排序的数组。我希望将数组中最大的 m 数字替换为0。

我认为我的算法看起来像这样:

k=1;
for j=n:1  %%starting from last position to first
    if(rem(j,2)==0 && (k<=m))  %%checking if the position is even & not getting over m numbers
        B(j) = 0;
        k = k + 1;
    end
end

有谁可以指出它为什么不起作用?谢谢!

2 个答案:

答案 0 :(得分:1)

我相信this应该做到这一点。这适用于具有奇数和偶数元素的向量。

n = numel(B);
B((n-mod(n,2)):-2:(n-mod(n,2)-2*M)) = 0

n = mod(numel(B),2);
B((end-n:-2:end-n-2*M)) = 0

我更喜欢Shai's solution,但如果你的矢量巨大M相对较小,我会采用这种方法,因为它避免了创建一个长度向量numel(B)/2

答案 1 :(得分:1)

有点复杂

even = (n-rem(n,2)) : -2 : 1; % even indices in descending order
B( even(1:m) ) = 0; % set to zero

请注意n-rem(n,2)如何确保我们从最后的偶数索引开始B

PS,
最好not to use j as a variable name in Matlab