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

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

时间: 2024-08-01 19:29:08

1005. 三角形最大面积的相关文章

求三角形的面积

1.数学知识 求三角形的面积 三边的边长分别为:a, b, c; 公式:s = (a + b + c) / 2; area = √s * ( s - a) * (s - b) * (s -c); 2.源代码 #include<iostream> #include<cmath> using namespace std; bool TriangleArea(double a, double b, double c, double &area) { if(a + b <=

利用向量积(叉积)计算三角形的面积和多边形的面积

利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j

The Area of an Arbitrary Triangle-任意三角形的面积

The Area of an Arbitrary Triangle-任意三角形的面积,允许重复计算: //The Area of an Arbitrary Triangle-任意三角形的面积 #include<iostream> #include<cmath> using namespace std; bool IsTriangle(double a,double b,double c); void areafun(double a,double b,double c,double

书写一个程序,可以根据用户的选择,分别运算圆形、长方形、三角形的面积

#include <stdio.h> #define PI 3.14 void main(){ int num; printf("请选择您要执行的操作:1.计算圆形面积2.长方形面积3.三角形面积\n"); scanf("%d",&num); switch (num) { case 1: { double r,area; printf("请输入圆形的半径:\n"); scanf("%lf",&r);

计算圆形、矩形、三角形的面积

class Progarm { static void Main(string[] argm) { Console.WriteLine("选择以下图形(输入图形序列号)"); Console.WriteLine("1.圆形,2.矩形,3.三角形); string str = Console.ReadLine(); switch(str) { case "1": Console.WriteLine("请录入圆的半径:"); int  r

zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积

题目来源: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=806 题意: 凸四边形上 有8个点, 4个顶点 , 和 每2个顶点的中点.经过这8个点的每一条线段,将四边形分成2份, 求这两份面积最近的面积. 分析:  枚举, 每条线段, 计算 一边面积 S(较小), 另一边 面积 s1 = sum - S  ,   找使 S / S1 最大的 面积, 即可. 代码如下: double add(double a, double

经典封装之计算三角形的面积

<!doctype html> <html> <head> <meta charset="utf-8"> <title>计算三角形的面积</title> <script> //创建一个计算三角形 function test(){ var h,d,s; h=5; d=8; s=h*d/2; alert(s); } test(); //活数据 function mj(h,j){ var s; s=h*j/2

【转载】利用向量积(叉积)计算三角形的面积和多边形的面积

向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,为了帮助记忆,利用三阶行

1022: 求三角形的面积

1022: 求三角形的面积 时间限制:1秒 内存限制:128MB 提交:109 正确:94 题目描述 给出三角形的三条边,求三角形的面积. 输入 输入三角形的三条边长(实数),数据之间用空格隔开. 输出 输出三角形的面积,结果保留2位小数. 样例输入 Copy Sample Input 2.5 4 5 样例输出 Copy Sample Output 4.95 提示 输入的三条边确保能组成三角形,用海伦公式或其他方法均可. 题解 #include<stdio.h> #include<mat