- 二叉搜索树与双向链表
private static TreeNode pre=null;
private static TreeNode cur=null;
public static TreeNode reverse(TreeNode root){
inorder(root);
return cur;
}
public static void inorder(TreeNode root){
if(root==null) return ;
inorder(root.left);
cur.left=pre;
if(pre!=null){
pre.right=cur;
}
pre = root;
if(cur!=null){
cur=root;
}
inorder(root.right);
}
- 字符串的排列
public static void Permutation(StringBuffer stb) {
if (stb == null)
return;
// for(int i=0;i<stb.length();i++) {
PermuCore(stb, 0, stb.length() - 1);
// }
}
public static void PermuCore(StringBuffer stb, int start, int end) {
if (start > end)
return;
if (start == end) {
System.out.println(stb);
} else {
for (int i = start; i <= end; i++) {
//选取一个元素放到当前最开始的位置(因为有for循环来回的增加i的值)
swap(stb, start, i);
//剩余全排列,
PermuCore(stb, start + 1, end);
//把元素放回原位置
swap(stb, start, i);
}
}
}
public static void swap(StringBuffer stb, int i, int j) {
char temp = stb.charAt(i);
stb.setCharAt(i, stb.charAt(j));
stb.setCharAt(j, temp);
}
- 数组中出现次数超过一半的数字
public static int morethahalf(int[] arr){
if(arr.length==0) return -1;
int cnt=1;
int res = arr[0];
for(int i=1;i<arr.length;i++){
if(cnt==0){
res = arr[i];
cnt=0;
}
if(arr[i]==res){
cnt++;
} else{
cnt--;
}
}
cnt=0;
for(int i:arr){
if(res==arr[i]){
cnt++;
}
}
if(cnt>=arr.length/2) {
return res;
}else{
return -1;
}
}
1 java异常的关键字有哪些?
使用throw显式的抛出异常并终止程序
使用throws抛出“被检查的异常”但是不处理
try catch处理异常
finally最终执行与try catch一块使用
2 描述一下异常的层级?
thowable是所有异常的父类,它的两个直接子类是error和exception
其中error表示编译时系统错误,不可预期和恢复,比如jvm崩溃,内存不足
exception分为被检查的异常异常,运行时异常; Checked exception能被预期并应该尝试修复,比如FileNotFoundException;
runtime exception表示运行时异常,通常不能预期,比如ArrayIndexOutOfBoundException;
3 运行时数据区域
程序计数器 正在执行的虚拟机字节码指令地址
虚拟机栈 用于存储局部变量,常量池,操作数栈;通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小,java -Xss=512M HackTheJava
本地方法栈 为本地方法服务,作用类似虚拟机栈,、
堆 为对象实例分配内存
方法区 用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
网友评论