題目:查找兩個數(shù)組中的相同數(shù)
方案一:
最笨的辦法莫過于雙重循環(huán)了氧卧,這種我們并不考慮,因為時間復雜度是N*N氏堤;
方案二:
如果只用數(shù)組的話沙绝,可以采用先排序,然后再用兩個指針順序找丽猬,只需要一次循環(huán)就可以宿饱。
public static Set<Integer> findCommon(int[] arr1, int[] arr2) {
Set<Integer> set= new HashSet<>();
if (arr1 == null || arr2 == null || arr1.length == 0 || arr2.length == 0) {
return set;
}
Arrays.sort(arr1);
Arrays.sort(arr2);
int i = 0, j = 0;
//循環(huán)完成任何一個數(shù)組就結束
while ( i < arr1.length && j < arr2.length ) {
//這種算法會導致有重復值,所以才需要用到HashSet去重
if(arr1[i] == arr2[j]){
set.add(arr1[i]);
i++;
j++;
continue;
}
if(arr1[i] < arr2[j]){
i++;
}else {
j++;
}
}
return list;
}
public static void main(String[] args) {
int a[] = {1,1,1,1,3,5,6,8,9};
int b[] = {1,1,3,5,7,10,12};
Set<Integer> result = findCommon(b,a);
for (int i : result){
System.out.print(i+",");
}
}
方案三:
采用HashMap脚祟,key為數(shù)組中值谬以,value>1的為重復值。
需要先去重由桌,然后循環(huán)一次就可以为黎。
public static Set<Integer> findCommon2(Integer[] arr1, Integer[] arr2){
Set<Integer> list = new HashSet<>();
if (arr1 == null || arr2 == null || arr1.length == 0 || arr2.length == 0) {
return list;
}
String[] strArray= new String[]{"Tom", "Bob", "Jane"};
Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
Set<Integer> set2 = new HashSet(Arrays.asList(arr2));
Map<Integer,Integer> map = new HashMap<>();
Iterator<Integer> its1 = set1.iterator();
Iterator<Integer> its2 = set2.iterator();
int key1 = 0;Integer key2 = 0;
while( its1.hasNext() || its2.hasNext()){
if(its1.hasNext() && its2.hasNext()){
key1 = its1.next();
key2 = its2.next();
map.put(key1, map.get(key1)==null?1:map.get(key1)+1);
map.put(key2, map.get(key2)==null?1:map.get(key2)+1);
}else if (its1.hasNext() ) {
key1 = its1.next();
map.put(key1, map.get(key1)==null?1:map.get(key1)+1);
} else if (its2.hasNext()) {
key2 = its2.next();
map.put(key2, map.get(key2)==null?1:map.get(key2)+1);
}
}
Set<Integer> keys = map.keySet();
Iterator<Integer> its = keys.iterator();
while (its.hasNext()){
Integer key = its.next();
if(map.get(key)>1){
list.add(key);
}
}
return list;
}
public static void main(String[] args) {
Integer a[] = {1,1,1,1,3,5,6,8,9};
Integer b[] = {1,1,3,5,7,10,12};
Set<Integer> result = findCommon2(b,a);
for (int i : result){
System.out.print(i+",");
}
}