Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions 976/code.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Solution {
public:
//三角形:两边之和大于第三边
int largestPerimeter(vector<int>& 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;
}
};
3 changes: 3 additions & 0 deletions 976/solution
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
贪心法
根据三角形的形成条件:两边之和大于第三边,要得到最大周长,首先把数组排序,之后指针每次都指向当前的末尾元素,判断前两个边长相加是否大于了当前的元素,如果满足条件直接返回,否则继续向前遍历。
两边之和大于第三边,两边之差小于第三边,其实这两个条件是等价的,设 x y z是我们当前排序后得到的一组待处理序列,我们需要最小化两边之和,最大化两边之差,即判断x+y>z z-x<y这两个不等式是否成立,通过移项我们发现,这两个式子是等价的,即判断x+y>z是否成立,这样的话,如果当前条件不成立,那么一定说明是z值过大,因为不可能通过移动x和y值来达到更大的z值,只能通过减小z值来使等式成立。