Find the intersection of two sorted arrays. OR in other words, Given 2 sorted arrays, find all the elements which occur in both the arrays.
Example :
Input :
A : [1 2 3 3 4 5 6]
B : [3 3 5]
Output : [3 3 5]
Input :
A : [1 2 3 3 4 5 6]
B : [3 5]
Output : [3 5]
NOTE : For the purpose of this problem ( as also conveyed by the sample case ), assume that elements that appear more than once in both arrays should be included multiple times in the final output
Solution:
Time: O(n + m) Space: O(n + m)
public class Solution { // DO NOT MODIFY THE LIST. IT IS READ ONLY public ArrayList<Integer> intersect(final List<Integer> A, final List<Integer> B) { int i = 0; int j = 0; ArrayList<Integer> result = new ArrayList<>(); while (i < A.size() && j < B.size()) { int aVal = A.get(i); int bVal = B.get(j); if (aVal == bVal) { result.add(aVal); i ++; j ++; } else if (aVal < bVal) { i ++; } else { j ++; } } return result; } }