求两个sorted数组的intersection e.g. [1,2,3,4,5],[2,4,6] 结果是[2,4]
difference
类似merge, 分小于等于大于三种情况,然后时间O(m+n), 空间O(1)
package ShortestSubsequenceIncluding;
import java.util.*; public class Solution2 {
public ArrayList<Integer> setInters(int[] arr1, int[] arr2) {
int i1=0, i2=0;
ArrayList<Integer> res = new ArrayList<Integer>();
while (i1<arr1.length && i2<arr2.length) {
if (arr1[i1] < arr2[i2]) i1++;
else if (arr1[i1] > arr2[i2]) i2++;
else {
res.add(arr1[i1]);
i1++;
i2++;
}
}
return res;
} public ArrayList<Integer> setDiff(int[] arr1, int[] arr2) {
int i1=0, i2=0;
ArrayList<Integer> res = new ArrayList<Integer>();
while (i1<arr1.length && i2<arr2.length) {
if (arr1[i1] < arr2[i2]) {
res.add(arr1[i1]);
i1++;
}
else if (arr1[i1] > arr2[i2]) {
i2++;
}
else {
i1++;
i2++;
}
}
while (i1 < arr1.length) {
res.add(arr1[i1]);
i1++;
}
return res;
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution2 sol = new Solution2();
ArrayList<Integer> res1 = sol.setInters(new int[]{1,2,3,4,4,5}, new int[]{2,4,4,6});
ArrayList<Integer> res2 = sol.setDiff(new int[]{2,3,4,4,4,5}, new int[]{1,2,4,4,6});
System.out.println(res2); } }
如果是无序的两个array,则Build两个hashMap, 遍历第一个map的keySet, O(m+n)time, O(m+n)space