55.1 二叉树的深度
public static int depth(TreeNode root){
if(root==null) return 0;
int left = depth(root.left);
int right = depth(root.right);
if(left>=right){
return left+1;
} else{
return right+1;
}
}
- 数组中只出现一次的数字
public static void FindNumsAppearOnce(int[] nums, int num1, int num2) {
int diff = 0;
for (int num : nums)
diff ^= num;
// 得到最右一位
System.out.println(diff);
diff &= -diff;
for (int num : nums) {
if ((num & diff) == 0) {
System.out.println("num1 is: " + num);
num1 ^= num;
} else
num2 ^= num;
}
System.out.println(num1 + num1);
}
57.1 和为 S 的两个数字
注意此时的lst的排放英国是01 23 45 这样的方式排放结果,以数组1 2 3 4 5 6找和为7的结果为例,index0是1 index 1是2。。。
public static ArrayList<Integer> sum(int[] arr,int target){
ArrayList<Integer> lst = new ArrayList<>();
int start = 0;
int end = arr.length-1;
while(start<end){
if(arr[start]+arr[end]==target){
lst.addAll(Arrays.asList(arr[start],arr[end]));
start++;
end--;
} else if(arr[start]+arr[end]<target){
start++;
} else{
end--;
}
}
return lst;
}
- 滑动窗口内整数的最大值
public static ArrayList<Integer> maxv(int[] arr,int k){
if(arr==null) return null;
ArrayList<Integer> lst= new ArrayList<>();
//注意表达式怎么写的
PriorityQueue<Integer> que = new PriorityQueue<>((s1,s2)->(s2-s1));
for(int i=0;i<k;i++){
que.add(arr[i]);
}
int curm=que.peek();
lst.add(curm);
//注意i j怎么初始化的
for(int i=1,j=i+k-1;j<arr.length;i++,j++){
que.remove(arr[i-1]);
que.add(arr[j]);
lst.add(que.peek());
}
return lst;
}
一 反射
每个类都有一个 Class 对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。
类加载相当于 Class 对象的加载。类在第一次使用时才动态加载到 JVM 中,可以使用 Class.forName("com.mysql.jdbc.Driver") 这种方式来控制类的加载,该方法会返回一个 Class 对象。
反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加载进来。
Class 和 java.lang.reflect 一起对反射提供了支持,java.lang.reflect 类库主要包含了以下三个类:
Field :可以使用 get() 和 set() 方法读取和修改 Field 对象关联的字段;
Method :可以使用 invoke() 方法调用与 Method 对象关联的方法;
Constructor :可以用 Constructor 创建新的对象。
2 Set
HashSet:基于哈希实现,支持快速查找,但不支持有序性操作,例如根据一个范围查找元素的操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的;
TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如 HashSet,HashSet 查找时间复杂度为 O(1),TreeSet 则为 O(logN);
LinkedHashSet:具有 HashSet 的查找效率,且内部使用链表维护元素的插入顺序。
3 List
ArrayList:基于动态数组实现,支持随机访问;
Vector:和 ArrayList 类似,但它是线程安全的;
LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。不仅如此,LinkedList 还可以用作栈、队列和双向队列。
4 Queue
LinkedList:可以用它来支持双向队列;
PriorityQueue:基于堆结构实现,可以用它来实现优先队列。