Fast checking if array has repeated elements or not
Ältere Kommentare anzeigen
I need to check whether a given array, A has repeated elements or not and return in true or false. The function runs near about 5*10^6 times. Initially I tried this
function flag = hasNoRepeats(A)
flag = numel(A)==numel(unique(A)) ;
end
This is very slow, it takes about 90-100 seconds. It is given that array has all positive integers and they are in between 1 and K.
function flag = hasNoRepeats(A,K)
tmp = zeros(1,K);
flag = true;
for i=1:numel(A)
if tmp(A(i))
flag = false;
break
end
tmp(A(i)) = 1;
end
end
This version is faster (~20 secs) but still slower than my requirements. Is there any way to do it faster?
4 Kommentare
Mehmed Saad
am 8 Apr. 2020
flag = sum(diff(sort(A)))>1;
Try this and tell me what time it got?
Dhritishmam Sarmah
am 8 Apr. 2020
Alex Mcaulley
am 8 Apr. 2020
Using sort and diff you can try with:
flag = ~sum(~diff(sort(A)));
Dhritishmam Sarmah
am 8 Apr. 2020
Antworten (1)
You can simply use unique to find out whether a array has repeated elements or not.
Let A be your array.
if length(A)==length(unique(A))
fprintf("A has no repeated elements") ;
else
fprintf("A has repeated elements") ;
end
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!