Detect a permutation of sequence

前端 未结 2 1083
难免孤独
难免孤独 2021-01-20 07:12

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 origin

2条回答
  •  借酒劲吻你
    2021-01-20 07:28

    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.

提交回复
热议问题