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

1005. 三角形最大面积

时间:2020-03-29 18:05:14      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:problem   button   mat   testcase   二维数组   如图所示   ntc   rip   nts   

1005. 三角形最大面积

中文English

平面上有一系列点。返回由其中三个点可以形成的三角形最大面积。

样例

样例:

输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如图所示,红色三角形面积最大。

技术图片

注意事项

3 <= points.length <= 50.
点不会重复。
-50 <= points[i][j] <= 50.
结果误差在10^(-6)以内可以被认为是正确的。

 
 
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param points: List[List[int]]
    @return: return a double
    """
    ‘‘‘
    大致思路:
    1.给出所有可能的数组集合(三个元素)
    2.三角形面积计算:矩形面积 - 其他三个三角形面积之和 (注意:矩形面积计算,根据提供的三个点x和y的差的最大值来计算,其他三个三角形都是根据各个点x和y的差值来进行计算)
    ‘‘‘
    def largestTriangleArea(self,points):
        res = []
        all_points_list = self.getalllist(points,3)

        ##三角形计算规则:矩形面积 - 其他三个三角形面积

        for a in all_points_list:
            #求矩形面积
            rectangle_x = max([x for x,y in a]) - min([x for x,y in a])
            rectangle_y = max([y for x,y in a]) - min([y for x,y in a])

            
            rectangle_S = abs(rectangle_x*rectangle_y)   

            ##求出其他三个三角形的面积,各两个点之间存在一个三角形(直角三角形)
            triangle_l = self.getalllist(a,2)
            triangle_S = 0
            for column in triangle_l:
                x = column[0][0] - column[1][0]
                y = column[0][1] - column[1][1]
                triangle_S += abs(x*y/2)
            
            res.append(abs(rectangle_S - triangle_S))
        return max(res)
                 

    def getalllist(self,points,n):
        res = []
        for i in range(len(points)):
            ##假如是首个值的话,需要单独append进来
            if i == 0:
                res.append([points[i]])
            else:
                res.append([points[i]])
                #同时需要循环前面的res,来进行拼接(注意,此时len(res)只根据最开始进来的来算)
                for j in range(len(res)-1):
                    res.append([points[i]]+res[j])
        
        new_res = []
        ##最后的时候,在去除掉长度不是3的数组
        while  res != []:
            pop_l = res.pop()
            if len(pop_l) == n:
                new_res.append(pop_l)
            #否则的话,继续,直到最终长度为0
        return new_res

注:lintcode未通过,你的代码内存使用超过了限制,检查你的空间复杂度。MLE通常是由多余的二维数组造成的。待优化

 

1005. 三角形最大面积

标签:problem   button   mat   testcase   二维数组   如图所示   ntc   rip   nts   

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12593506.html

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