码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode刷题19

时间:2019-08-30 23:09:31      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:class   span   组合   style   tar   ret   i++   abs   垂直   

j今天刷的题是Leecode第11题,题目要求是:

给定n个非负整数,每个整数代表一个坐标(i,ai),在坐标内画n条垂直线
* 垂直线i的两段分别是i,ai和i,0,找出其中的两条线,使得围城的面积最大
首先是一个暴力算法,即挨个组合,看总的面积那个组合最大,下面的代码耗时428ms,内存消耗44.7MB。代码如下:
public static int getArea(int[] height){
        int area=Integer.MIN_VALUE;
        for (int i = 0; i <height.length ; i++) {
            for (int j = 0; j <i ; j++) {
                int nowarea=area(height,i,j);
                if (nowarea>area){
                    area=nowarea;
                }
            }
        }
        return area;
    }
    public static int area(int[]nums,int i,int j){
        return Math.abs(i-j)*Math.min(nums[i],nums[j]);
    }

第二种方法是双指针遍历,,主要的难点在于指针的移动。双指针中,移动较小的那个。耗时6ms,内存消耗45.9MB

public static int getArea2(int[] height){
        int start=0;
        int end=height.length-1;
        int area=0;
        while (start<end){
            area=Math.max(area,(end-start)*Math.min(height[start],height[end]));
            if (height[start]<height[end]){
                start++;
            }else {
                end--;
            }
        }

        return area;
    }

 

leetcode刷题19

标签:class   span   组合   style   tar   ret   i++   abs   垂直   

原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11437266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!