代码
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < nums.length;i++){
int need = target-nums[i];
if(map.containsKey(need)){
return new int[] {i,map.get(need)};
}
map.put(nums[i],i);
}
return new int []{-1,-1};
}
}
存在问题 不会返回新建数组 new int[]{-1,-1}, 没有new int[];
map 对含有Key值判错误map.containsKey(need) 写成了map.contains(need) ;
题目简单
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int res = Integer.MIN_VALUE;
// int res = 0;
public int maxPathSum(TreeNode root) {
traverse(root);
return res;
}
public int traverse(TreeNode root){
if(root == null){
return 0;
}
int left = Math.max(traverse(root.left),0);
int right = Math.max(traverse(root.right),0);
// int left = traverse(root.left);[2,-1]
// int right = traverse(root.right);
int val = left+ right+ root.val;
res = Math.max(res,val);
return Math.max(left,right)+root.val;
}
}
二叉树递归遍历,注意定义递归函数意义
return Math.max(left,right)+root.val; 最开始没加入root.val ,仅表示左右子树最大值应该加上root.val.
初始 res 应该设置为最小值,不然后面结果为复数会取res
int right = Math.max(traverse(root.right),0); 左右同理,可以不选取
八股
Java 语言特性
简单易学
跨平台使用,一次编译随处运行(javac 编译成字节码 魔术CAFEBABE)
支持多线程
无需手动释放内存(安全 同时没有指针访问内存)
面向对象(封装继承多态)
编译与解释并存有JIT进行优化(Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。)
动态执行
单继承 C++为多继承,但是可以实现多个接口
C++支持方法重载和操作符重载,java仅支持方法重载
JDK JRE JVM
jvm是java虚拟机,运行java字节码的地方,jvm有规范,只要按照规范来进行设计都可以为java虚拟机
JDK 是 Java Development Kit 缩写 包含JRE JVM 开发编译器等
JRE 为java运行环境,包括java虚拟机类库,java 命令等
重载与重写
重载(Overload)参数类型不同、参数个数不同甚至是参数顺序不同,返回类型没有规定,不可以通过返回类型判断是否重载,方法名相同。
重写发生在父子类之间,方法名,参数列表,返回类型必须相同,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private),重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。