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