leetcode 812.最大三角形面积

原题如下:

https://leetcode-cn.com/problems/largest-triangle-area/
在这里插入图片描述

题解

思路一

海伦公式:
回溯法遍历:

/*
 *@v7fgg
 *执行用时 :13 ms, 在所有 Java 提交中击败了14.08%的用户
 *内存消耗 :37.6 MB, 在所有 Java 提交中击败了50.00%的用户
 *2020年6月15日 15:22
 */
class Solution {
    double ans=0;
    public double largestTriangleArea(int[][] points) {
        mianji(0,points,new ArrayList<>());
        return ans;
    }
    public void mianji(int kaishi,int[][] points,ArrayList<int[]> list){
        if(list.size()==3){
            double a=Math.sqrt(Math.pow(list.get(0)[0]-list.get(1)[0],2)+Math.pow(list.get(0)[1]-list.get(1)[1],2));
            double b=Math.sqrt(Math.pow(list.get(0)[0]-list.get(2)[0],2)+Math.pow(list.get(0)[1]-list.get(2)[1],2));
            double c=Math.sqrt(Math.pow(list.get(2)[0]-list.get(1)[0],2)+Math.pow(list.get(2)[1]-list.get(1)[1],2));
            //注意绝对值
            double S=Math.sqrt(Math.abs((a+b+c)*(a+b-c)*(b+c-a)*(a+c-b)))/4;
            ans=Math.max(ans,S);
            return;
        }
        for(int i=kaishi;i<points.length;i++){
            list.add(points[i]);
            mianji(i+1,points,list);
            list.remove(list.size()-1);
        }
    }
}

普通遍历:

/*
 *@v7fgg
 *执行用时 :15 ms, 在所有 Java 提交中击败了14.73%的用户
 *内存消耗 :37.5 MB, 在所有 Java 提交中击败了50.00%的用户
 *2020年6月15日 15:31
 */
class Solution {
    public double largestTriangleArea(int[][] points) {
        double ans=0;
        for(int i=0;i<points.length-2;i++){
            for(int j=i+1;j<points.length-1;j++){
                double a=Math.sqrt(Math.pow(points[i][0]-points[j][0],2)+Math.pow(points[i][1]-points[j][1],2));
                for(int k=j+1;k<points.length;k++){
                    double b=Math.sqrt(Math.pow(points[i][0]-points[k][0],2)+Math.pow(points[i][1]-points[k][1],2));
                    double c=Math.sqrt(Math.pow(points[k][0]-points[j][0],2)+Math.pow(points[k][1]-points[j][1],2));
                    ans=Math.max(ans,Math.sqrt(Math.abs((a+b+c)*(a+b-c)*(b+c-a)*(a+c-b)))/4);
                }
            }
        }return ans;
    }
}

思路二

鞋带算法:

/*
 *@v7fgg
 *执行用时 :12 ms, 在所有 Java 提交中击败了18.18%的用户
 *内存消耗 :37.3 MB, 在所有 Java 提交中击败了50.00%的用户
 *2020年6月15日 20:10
 */
class Solution {
    public double largestTriangleArea(int[][] points) {
        double ans=0;
        for(int i=0;i<points.length-2;i++){
            for(int j=i+1;j<points.length-1;j++){
                for(int k=j+1;k<points.length;k++){
                    //S/2.0
                    ans=Math.max(ans,Math.abs(points[i][0]*points[j][1]+points[j][0]*points[k][1]+points[k][0]*points[i][1]-points[i][1]*points[j][0]-points[j][1]*points[k][0]-points[k][1]*points[i][0])/2.0);
                }
            }
        }return ans;
    }
}

思路三

叉积取模:

/*
 *@v7fgg
 *执行用时 :7 ms, 在所有 Java 提交中击败了43.11%的用户
 *内存消耗 :37.4 MB, 在所有 Java 提交中击败了50.00%的用户
 *2020年6月15日 20:23
 */
class Solution {
    public double largestTriangleArea(int[][] points) {
        double ans=0;
        for(int i=0;i<points.length-2;i++){
            for(int j=i+1;j<points.length-1;j++){
                for(int k=j+1;k<points.length;k++){
                    ans=Math.max(ans,Math.abs(((points[j][0]-points[i][0])*(points[k][1]-points[j][1]))-((points[j][1]-points[i][1])*(points[k][0]-points[j][0])))/2.0);
                }
            }
        }return ans;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值