Check if 2 arrays are similar without hashing or sorting

后端 未结 4 1060
南旧
南旧 2021-01-13 10:20

We need to check if 2 arrays are similar or not. The elements can be duplicate as well. For example A = {2,3,4,5,6,6} and B = {3,6,2,4,6,5} are similar.

I have a nai

4条回答
  •  有刺的猬
    2021-01-13 10:32

    You can do it in O(max(LA, LB)) time, where LA and LB are lengths of A and B, respectively, but at the price of using O(M) space, where M is an allowed range of values in the arrays (i.e. there are such constants min and max, so that min <= a, b <= max holds true for every a in A and b in B).

    seen = array[min..max]
    foreach a in A
        seen[a] = 'a'
    
    foreach b in B
        if seen[b] != 'a'
            // A didn't contain b
            return "A and B are not equivalent"
        else
           seen[b] = 'a,b'
    
    foreach s in seen
        if s == 'a'
            // A did contain a which was not in B
            return "A and B are not equivalent"
    
    return "A and B are equivalent"
    

    This approach is practical if the arrays are very large, but all their values fit in a small range.

提交回复
热议问题