Contents

开始用遍历,最后一组数据超时了。
然后看了一下题解。。。
用2个指针i,j指向头尾。要使面积增大,要么增加长度,要么增加高度。当长度为头尾时最长。
当i,j向中间移动时,要使面积增大,则高度要增大。
所以,当i,j处于最优位置的时候,假设i < j,在j的右边,没有比j更高的长度了。在i的左边,没有比更高的长度了。
|
| |
|—-|——-|——|—
i j

 public static int maxArea(int[] height) {
     int maxS = 0;
     int temp = 0;
     int i = 0, j = height.length -1;
     while(i < j){
         temp = min(height[j],height[i]) * (j - i);
         maxS =  temp > maxS ?  temp : maxS;
         if(height[i] > height[j]){
             j--;
         }else{
             i++;
         }

     }
     return maxS;
 }

 public static int min(int a, int b){
    return a <= b ? a : b;    
}

判断2个二叉树是不是相等

public boolean isSameTree(TreeNode p, TreeNode q) {
       if(null == p && null == q){
           return true;
       }
       if(null == p || null == q){
           return false;
       }
       return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
   }
Contents