From 8616e45ef265c4fc88f606ee914f2e6d3732161b Mon Sep 17 00:00:00 2001 From: mahaozhong <1831866525@qq.com> Date: Sun, 29 Nov 2020 11:37:46 +0800 Subject: [PATCH] LeetCode-976 --- 976/code.cpp | 13 +++++++++++++ 976/solution | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 976/code.cpp create mode 100644 976/solution diff --git a/976/code.cpp b/976/code.cpp new file mode 100644 index 0000000..2759bc6 --- /dev/null +++ b/976/code.cpp @@ -0,0 +1,13 @@ +class Solution { +public: + //三角形:两边之和大于第三边 + int largestPerimeter(vector& A) { + int len = A.size(); + if (len < 3) return 0; + sort(A.begin(), A.end()); + for (int i = len - 1; i >= 2; i--) { + if (A[i - 1] + A[i - 2] > A[i]) return A[i - 1] + A[i - 2] + A[i]; + } + return 0; + } +}; diff --git a/976/solution b/976/solution new file mode 100644 index 0000000..429532d --- /dev/null +++ b/976/solution @@ -0,0 +1,3 @@ +贪心法 +根据三角形的形成条件:两边之和大于第三边,要得到最大周长,首先把数组排序,之后指针每次都指向当前的末尾元素,判断前两个边长相加是否大于了当前的元素,如果满足条件直接返回,否则继续向前遍历。 +两边之和大于第三边,两边之差小于第三边,其实这两个条件是等价的,设 x y z是我们当前排序后得到的一组待处理序列,我们需要最小化两边之和,最大化两边之差,即判断x+y>z z-xz是否成立,这样的话,如果当前条件不成立,那么一定说明是z值过大,因为不可能通过移动x和y值来达到更大的z值,只能通过减小z值来使等式成立。