leetcode-812. 最大三角形面积(纯个人学习记录,无参考价值) - Go语言中文社区

leetcode-812. 最大三角形面积(纯个人学习记录,无参考价值)


最近发现自己的编程能力真是太差了,记录leetcode专栏也是为了从点滴做起。避免眼高手低。

 

leetcode - 812. 最大三角形面积

给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。

示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释: 
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。

注意:

  • 3 <= points.length <= 50.
  • 不存在重复的点。
  •  -50 <= points[i][j] <= 50.
  • 结果误差值在 10^-6 以内都认为是正确答案。

 

       这道题乍一看都感觉是AC不了的(因为基本上算法题都会对算法效率有一些要求?),自己其实根本没有系统的学习过算法,近期开始从头开始看算法相关推荐书籍了,扫一下盲。(用三边计算三角形面积的公式百度找的。。。)

       做了这道题唯一的收获就是要仔细审题吧,题目说明输入至多50个点,数值也只在 -50~50之间。50 x 50 x 50的计算量应该还挺小的吧。。。尝试了一下暴力破解法,结果通过了(这道题leetcode标记为简单)。

       平时工作也是,遇到问题首先要了解问题的范围,才能找到相应的解决办法。杀猪用宰牛刀就得不偿失了

我的解法:

class Solution {
    public double largestTriangleArea(int[][] points) {
        double max = 0;
        points = new int[][]
                {{0, 0}, {0, 1}, {1, 0}, {0, 2}, {2, 0}}
        ;
        for (int i = 0; i < points.length; i++) {
            for (int j = 0; j < points.length; j++) {
                for (int k = 0; k < points.length; k++) {
                    if (i == j || i == k || j == k) {
                        continue;
                    }
                    double a = getEdge(points[i][0], points[i][1], points[j][0], points[j][1]);// ij
                    double b = getEdge(points[j][0], points[j][1], points[k][0], points[k][1]);// jk
                    double c = getEdge(points[i][0], points[i][1], points[k][0], points[k][1]);// ik
                    double s = (1 / 4.0) * Math.sqrt((a + b + c) * (a + b - c) * (a + c - b) * (b + c - a));
                    if (max < s) {
                        max = s;
                    }
                }
            }
        }
        return max;
    }

    private double getEdge(int x1, int y1, int x2, int y2) {
        return Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
    }
}

菜的一B_1:

       上面的代码57个用例,60ms。AC后看了看用时最短的代码(10ms),真的是被自己蠢哭了,当时还在想下面的三层for循环是不是不能遍历所有的组合。。。。  

String[] chars = new String[]{"a", "b", "c","d"};
for (int i = 0; i < chars.length; i++) {
    for (int j = i + 1; j < chars.length; j++) {
        for (int k = j + 1; k < chars.length; k++) {
            System.out.println(chars[i] + chars[j] + chars[k]);
        }
    }
}

       其实很简单的问题,需要细心,需要耐心。发现自己很多时候思路还没有走完整个计算流程,中途就中断思考了,缺的是耐心。

菜的一B_2:

       int[][] points = new int[2][3];

       points.length我居然在犹豫到底等于2还是等于6.....基础太差,需要系统的看一遍Java

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_22989625/article/details/81490585
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:39:53
  • 阅读 ( 950 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢