首页 > 其他 > 详细

leetcode刷题19

时间:2019-08-30 23:16:01      阅读:86      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!