LeetCode 976. Largest Perimeter Triangle (三角形的最大周长)
题目标签:Array
题目给了我们一个 边长的 array, 让我们找出 最大边长和的三角形,当然前提得是这三条边能组成三角形。如果array 里得边长组成不了三角形,返回0。
最直接的理解就是,找到三条最长的边,再判断是不是能够组成三角形,如果不行,继续去找更小得边。
所以维护三个max1,max2,max3,然后利用 “任意两边之和大于第三边” 来判断。
具体看code。
Java Solution:
Runtime beats 99.57%
完成日期:2/11/2019
关键点:“任意两边之和大于第三边”
1 class Solution 2 { 3 public int largestPerimeter(int[] A) 4 { 5 int max1 = -1; 6 int max2 = -1; 7 int max3 = -1; 8 boolean triangleFormed = false; 9 int prevMax = Integer.MAX_VALUE; 10 11 do { 12 max1 = -1; 13 max2 = -1; 14 max3 = -1; 15 // iterate A to get 3 max numbers 16 for(int max : A) 17 { 18 if(max > max1 && max < prevMax) 19 { 20 max3 = max2; 21 max2 = max1; 22 max1 = max; 23 } 24 else if(max > max2 && max < prevMax) 25 { 26 max3 = max2; 27 max2 = max; 28 } 29 else if(max > max3 && max < prevMax) 30 { 31 max3 = max; 32 } 33 } 34 35 // validate 3 numbers can form triangle 36 triangleFormed = validateTriangle(max1, max2, max3); 37 38 if(!triangleFormed) 39 prevMax = max1; 40 41 if(max1 < 0 || max2 < 0 || max3 < 0) 42 return 0; 43 44 } while(!triangleFormed); 45 46 47 return max1 + max2 + max3; 48 } 49 50 51 private boolean validateTriangle(int a, int b, int c) 52 { 53 if(a + b <= c) 54 return false; 55 else if(b + c <= a) 56 return false; 57 else if(c + a <= b) 58 return false; 59 60 61 return true; 62 } 63 }
参考资料:N/A
LeetCode 题目列表 - LeetCode Questions List
题目来源:https://leetcode.com/