For a >= b >= c, a,b,c can form a triangle if a < b + c.
We sort the A
Try to get a triangle with 3 biggest numbers.
If A[n-1] < A[n-2] + A[n-3], we get a triangle.
If A[n-1] >= A[n-2] + A[n-3] >= A[i] + A[j], we cannot get any triangle with A[n-1]
repeat step2 and step3 with the left numbers.
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for (int i = A.length - 1; i > 1; --i)
if (A[i] < A[i - 1] + A[i - 2])
return A[i] + A[i - 1] + A[i - 2];
return 0;
}
int largestPerimeter(vector<int>& A) {
sort(A.begin(), A.end());
for (int i = A.size() - 1 ; i > 1; --i)
if (A[i] < A[i - 1] + A[i - 2])
return A[i] + A[i - 1] + A[i - 2];
return 0;
}
def largestPerimeter(self, A):
A = sorted(A)[::-1]
for i in range(len(A) - 2):
if A[i] < A[i + 1] + A[i + 2]:
return A[i] + A[i + 1] + A[i + 2]
return 0