rhezo's blog

By rhezo, history, 8 years ago, In English

Given 2 sorted arrays with distinct elements, one sorted in increasing order and other sorted in decreasing order. Can we find the element which is present in both of them in O(logN) or O((logN)2)?

  • Vote: I like it
  • -12
  • Vote: I do not like it

»
8 years ago, # |
Rev. 2   Vote: I like it -15 Vote: I do not like it

Good question. Personally I don't think it's possible but I have utterly no proof of my suspicion. I can only think of (trivial) O(NlogN) solution.

  • »
    »
    8 years ago, # ^ |
      Vote: I like it +5 Vote: I do not like it

    Yeah NlogN solution is clear

»
8 years ago, # |
  Vote: I like it +24 Vote: I do not like it

You can do O(N): just merge this two arrays and iterate over elements to see if there are equal neighbors.From this point of view it is clear that O(N) is the best complexity. For example, for arrays where elements of two arrays alternate when you merge them can be checked only through accessing all their elements by comparing all pairs.

»
8 years ago, # |
  Vote: I like it +6 Vote: I do not like it

We can use two pointers. Start from the left in one array and from the right in the other one (minimum element in each one). If the elements are equal, you've found a match. If not, move the pointer that has the minimum element.