Java日记2018-07-04

2018-07-04  本文已影响0人  hayes0420

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;
        }
         
    }
  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;
    }
  1. 滑动窗口内整数的最大值
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

3 List

4 Queue

上一篇 下一篇

猜你喜欢

热点阅读