可以一起总结的题目: 三数之和(15)-CSDN博客
官方解法:
cpp
class Solution {
public:
//官方解法
int largestPerimeter(vector<int>& nums)
{
sort(nums.begin(), nums.end());
for (int i = nums.size() - 1; i >= 2; --i) {
//先排序,因为是求最大的能构成三角形的周长,对于排序数组
//只需要满足nums[i-2] + nums[i-1] > nums[i],
//这里面也可能比i-1,i-2小的位置也满足,但是这些周长一定没有nums[i-2] + nums[i-1] + nums[i] 大
//从大往小找,体现贪心的算法思想。
if (nums[i-2] + nums[i-1] > nums[i]) {
return (nums[i-2] + nums[i-1] + nums[i]);
}
}
return 0;
}
};
总结:
计算的时间复杂度O(NlogN),空间复杂度O(1),算法细节如注释所示 。有联系的题目 三数之和(15)-CSDN博客,都是三数之和相关的问题。