Блог пользователя rhezo

Автор rhezo, история, 8 лет назад, По-английски

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)?

  • Проголосовать: нравится
  • -12
  • Проголосовать: не нравится

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится -15 Проголосовать: не нравится

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 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

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 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

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.