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)?
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
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)?
Name |
---|
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.
Yeah NlogN solution is clear
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.
Thanks!
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.