I have a list of numbers like this (array)
1 2 3 4
So my goal is the check given another array if this array if a permutation of the original example, the array (3 4 1 2)
and (1 2 4 3)
are permutations of the original but (1 2 1 1)
or (1 5 4 3)
not.
Two possible solutions are:
(1) O(n)
space & average time solution will be to create a histogram, based on a hash table, of the data - and check if the histograms are identicals. The idea is - count how many each element appears in each list, and then check to see each element appears exactly the same times in each array.
pseudo code:
map1 = new map //first histogram
map2 = new map //second histogram
for each element in arr1: //create first histogram
if (element in map1):
map1.put(element,map1.get(element)+1)
else:
map1.put(element,1)
for each element in arr2: //create second histogram
if (element in map2):
map2.put(element,map2.get(element)+1)
else:
map2.put(element,1)
for each key in map 1: //check all elements in arr1 appear in arr2
if map1.get(key) != map2.get(key):
return false
//make sure the sizes also match, it means that each element in arr2 appears in arr1.
return arr1.length == arr2.length
(2) O(nlogn)
time solution will be to sort both arrays, and then iterate and check if they are identical.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With