合并区间-中等
解决这个题的关键是自定义数组的比较器,还有就是如何将集合转化为特定类型的数组。
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length<=1){
return intervals;
}
List<int[]> list=new ArrayList<>();
Arrays.sort(intervals,new Comparator<int[]>(){
public int compare(int[] interval1,int[] interval2){
return interval1[0]-interval2[0];
}
});
for(int i=0;i<intervals.length;i++){
if(list.isEmpty()){
list.add(intervals[i]);
continue;
}else{
int[] last=list.get(list.size()-1);
int[] newOne=intervals[i];
if(newOne[0]<=last[1]){
if(newOne[1]>last[1]){
int[] newList={last[0],newOne[1]};
list.set(list.size()-1, newList);
}
}else{
list.add(newOne);
}
}
}
return list.toArray(new int[list.size()][]);
}
}
不同路径-中等
这道题很简单,用动态规划就可以解决。也可以用数学方法直接算出来。
class Solution {
public int uniquePaths(int m, int n) {
int[][] r=new int[m][n];
for(int i=0;i<m;i++){
r[i][0]=1;
}
for(int j=0;j<n;j++){
r[0][j]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
r[i][j]=r[i][j-1]+r[i-1][j];
}
}
return r[m-1][n-1];
}
}
验证二叉搜索树-中等
方法一:递归。要注意二叉搜索树的定义,在原函数上不可以直接递归,要借助辅助函数。
class Solution {
public boolean isValidBST(TreeNode root,long lower,long upper){
if(root==null){
return true;
}else{
if(root.val<=lower||root.val>=upper){
return false;
}else{
return isValidBST(root.left,lower,root.val)&&isValidBST(root.right,root.val,upper);
}
}
}
public boolean isValidBST(TreeNode root) {
return isValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
}