1.两个数组,求交集。用Hash表。
package com.interview.array;
import java.util.*;
/**
* 求数组交集
*/
public class ArrayIntersection {
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3};
int[] b = new int[]{2, 3};
for (int i : new Solution().intersection(a, b)) {
System.out.print(i + " ");
}
}
}
/**
* byte Byte
*
* int Integer
*
* short Short
*
* long Long
*
* float Float
*
* double Double
*
* boolean Boolean
*
* char Character
*/
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Map<Integer, Integer> map1 = new HashMap<>();//nums1的map
Map<Integer, Integer> map2 = new HashMap<>();//将答案存到map2中
for (int i : nums1) {
if (!map1.containsKey(i)) {
map1.put(i, i);
}
}
for (int j : nums2) {
if (map1.containsKey(j) && !map2.containsKey(j)) {
map2.put(j, j);
}
}
int[] result = new int[map2.size()];
int index = 0;
for (int k : map2.keySet()) {
result[index++] = map2.get(k);
}
return result;
}
}
2.数组求全排序
package com.test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListAllPrint2 {
/**
* 使用createList方法,填充参数列表传递过来的List,默认是Integer,一般是这个类型,你可以修改别的类型
*/
public void createList(int n, List list) {
if (n == 0) {
n = 3;
}
for (int i = 1; i <= n; i++) {
list.add(i);
}
}
/**
* printAll是输出全排列的递归调用方法,list是传入的list,用LinkedList实现,
* 而prefix用于转载以及输出的数据
* length用于记载初始list的长度,用于判断程序结束。
*/
public void printAll(List candidate, String prefix, int length) {
if (prefix.length() == length) {
System.out.println(prefix);
return;
}
for (int i = 0; i < candidate.size(); i++) {
List temp = new LinkedList(candidate);
String temp_str = prefix + temp.remove(i);//不要影响了当前剩下的遍历
printAll(temp, temp_str, length);
}
}
/**
* 测试代码
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> list = new ArrayList<Integer>();
ListAllPrint2 lap = new ListAllPrint2();
lap.createList(3, list);
lap.printAll(list, "", list.size());
}
}