递归消除数组中的最小数

时间:2016-11-01 19:14:35

标签: matlab signals

我有一个由4组组成的数组:

A=[1 1 1 2 2 1 1 1 2 2 3 3 4] 

这里“1”出现六次,“2”出现四次,“3”出现两次,“4”出现一次 在第一次迭代中,我应该找到出现次数最少的数字(在这种情况下为4),并将其替换为下一个最少出现的数字(即将4替换为3)。然后在第二次迭代中,最少出现的数字是3,所以我应该用2替换它。

有人可以帮忙用一个简单的代码来做这件事吗?

1 个答案:

答案 0 :(得分:2)

基本上,您想要计算数组中的重复元素,您可以使用hist元素的unique来执行此操作。这是一个草图:

values = unique(A);
while 1
    counts = hist(A, values);
    % work only with values that has count > 0
    sel = counts == 0;
    counts(sel) = inf;
    if sum(~sel) < 2
        % stop - you reached the last unique value
        break
    end
    [mc, mi] = min(counts); % found value with minimal number of occurences
    mv = values(mi); % the value to be eliminated
    counts(mi) = inf;
    [mc2, mi2] = min(counts); % find second min 
    A(A==mv) = values(mi2) % replace
end