• 1005. 三角形最大面积


    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通常是由多余的二维数组造成的。待优化

  • 相关阅读:
    SpringBoot java.lang.IllegalArgumentException: Request header is too large
    (转)以太坊 钱包 创建 导入 Keystore
    (转)以太坊数据同步常见问题集锦
    以太坊nonce
    (转)Fabric 1.0 读写集
    (转)Fabric CA环境的集成
    Hyperledger Fabric CA的命令行用法
    oracle新建表空间与用户
    积分智能合约
    远程桌面,身份验证错误:要求的函数不正确等解决办法
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12593506.html
Copyright © 2020-2023  润新知