Witam, mam jeden wektor z elementami losowymi typu [1,2,3,2,2,1,1,2,3,4,1] chciałbym, aby w jakiś krótki sposób funkcja przepisała wszystkie występujące elementy z tej tablicy do nowej i otrzymam wówczas wynik w postaci [2,3,4,0,0,0,0,0,0,0] (jedynki mają być pomijalne)
Zera w drugim wektorze to wartości domyślne, nie będą nadpisywane, jeśli unikalnych elementów nie będzie wystarczająco dużo, jeśli jednak liczba elementów unikalnych przekroczy 10, to niech funkcja się zatrzyma.
Chodzi mi o jakiś prosty algorytm, wielkości wektorów są dane i niezbyt wielkie (pierwszy 300 elementów, drugi 10).
Generalnie mam do dyspozycji tylko IF, CASE, FOR, WHILE, bo to jezyk SCL, ale najbardziej i tak interesuje mnie ogólny algorytm, bo problem pojawia się u mnie w momencie, gdy muszę sprawdzić czy element wystąpił o 2 wstecz.
Aha,
coś takiego napisałem sam
A=[1,2,3,4,5,2,2,3,4,2,1,1,...] % jakiś random z określonego zakresu o określonej długości
B=zeros(10,1)
k=0;
for i:1:300
if k==11
return
end
if k==1 && A(i)~=1
B(k)=A(i)
k++;
elseif k>1 && B(k-1)~=A(i)
B(k)=A(i)
k++;
end
end
No i właśnie w momencie przy elseif nie jest sprawdzany warunek czy np (B(k-2) ~= A(i) dla k=2 itd.
Nie wiem jak przy rosnącym k sprawdzić wszystkie poprzednie elementy, bo nie może być sytuacji, w której na końcu dostanę wektor: [2,3,4,2,0,0,0,0,0,0], bo 3 byłą różna do aktualnej wartości 2.
Algorytm napisałem w matlabie, ale możecie napisać w czymkolwiek lub tylko jakąś idee, będę bardzo wdzięczny.
Nie chcę tworzyć kolosa, tylko coś zwięzłego.