我有一个按升序排序的数组。我希望将数组中最大的 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
有谁可以指出它为什么不起作用?谢谢!
答案 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
。