码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 976. Largest Perimeter Triangle (三角形的最大周长)

时间:2019-03-04 09:18:11      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:imm   理解   rev   triangle   参考   numbers   orm   class   ref   

题目标签: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/

LeetCode 976. Largest Perimeter Triangle (三角形的最大周长)

标签:imm   理解   rev   triangle   参考   numbers   orm   class   ref   

原文地址:https://www.cnblogs.com/jimmycheng/p/10468684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!