寻找连个有序数组A,B,两者不重复的部分
补充知识:
map中存储的是键值对,也就是说通过set方法进行参数和值的存储,之后通过get“键”的形式进行值的读取。举例:
Map map = new Hashmap();//创建一个map
map.put(“key”,“value”);//给map赋值
String vlaues = map.get(“key”);//获取map中键值为“key”的值
system.out.println(vlaues );//输出结果
以上代码的运行结果:value;
备注:map中可以存放是字符串,也可以存放的是对象,这个根据实际需要进行调整即可,也可以通过”“的形式来进行对象转换,这个在特定场景下进行特定转换即可。
package basic_class_01;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class Code_10_GetAllNotIncluded {
public static List<Integer> GetAllNotIncluded(int[] A, int[] B) {
List<Integer> res = new ArrayList<>();
for (int i = 0; i < B.length; i++) {
int l = 0;
int r = A.length - 1;
boolean contains = false;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (A[mid] == B[i]) {
contains = true;
break;
}
if (A[mid] > B[i]) {
r = mid - 1;
} else {
l = mid + 1;
}
}
if (!contains) {
res.add(B[i]);
}
}
return res;
}
// for test
public static int[] generateRandomArray(int maxSize, int maxValue) {
int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
}
return arr;
}
// for test
//Map是以K-Value的键值对形式来存储的,不能包含相同的key,每个key只能映射一个value。
public static boolean isEqual(List<Integer> l1, List<Integer> l2) {
if (l1.size() != l2.size()) {
return false;
}
HashMap<Integer, Integer> map = new HashMap<>();
for (Integer i : l1) {
if (!map.containsKey(i)) {//https://blog.youkuaiyun.com/zbx931197485/article/details/51518888
map.put(i, 0);
}
map.put(i, map.get(i) + 1);
}
for (Integer i : l2) {
if (!map.containsKey(i)) {
return false;
}
map.put(i, map.get(i) - 1);
if (map.get(i) < 0) {
return false;
}
}
return true;
}
// for test
public static void main(String[] args) {
int testTime = 300000;
int sortedArrayMaxSize = 300;
int unsortedArrayMaxSize = 10;
int maxValue = 100;
boolean succeed = true;
for (int i = 0; i < testTime; i++) {
int[] A = generateRandomArray(sortedArrayMaxSize, maxValue);
int[] B = generateRandomArray(unsortedArrayMaxSize, maxValue);
Arrays.sort(A);
List<Integer> res1 = GetAllNotIncluded(A, B);
List<Integer> res2 = comparator(A, B);
if (!isEqual(res1, res2)) {
succeed = false;
break;
}
}
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
}
}