我有一个由4组组成的数组:
A=[1 1 1 2 2 1 1 1 2 2 3 3 4]
这里“1”出现六次,“2”出现四次,“3”出现两次,“4”出现一次 在第一次迭代中,我应该找到出现次数最少的数字(在这种情况下为4),并将其替换为下一个最少出现的数字(即将4替换为3)。然后在第二次迭代中,最少出现的数字是3,所以我应该用2替换它。
有人可以帮忙用一个简单的代码来做这件事吗?
答案 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