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/

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

时间: 2024-10-10 12:43:32

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

LeetCode 976. Largest Perimeter Triangle

976. Largest Perimeter Triangle(三角形的最大周长) 链接 https://leetcode-cn.com/problems/largest-perimeter-triangle 题目 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回?0. 示例 1: 输入:[2,1,2] 输出:5 示例 2: 输入:[1,2,1] 输出:0 示例 3: 输入:[3,2,3,4] 输出:10

【Leetcode_easy】976. Largest Perimeter Triangle

problem 976. Largest Perimeter Triangle solution: class Solution { public: int largestPerimeter(vector<int>& A) { sort(A.begin(), A.end());//decrease. 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]; } re

「Leetcode」976. Largest Perimeter Triangle(C++)

分析 好久不刷题真的思维僵化,要考虑到这样一个结论:如果递增的三个数\(x_i,x_{i+1},x_{i+2}\)不符合题意,那么最大的两边之差一定大于等于第一条边,那么任何比第一条边小的都不能成立.这样一来,递增排序,然后线性找就可以了. 代码 class Solution { public: int largestPerimeter(vector<int>& A) { int ans=0; sort(A.begin(),A.end()); for(int i=A.size()-3;

[Swift Weekly Contest 118]LeetCode976. 三角形的最大周长 | Largest Perimeter Triangle

Given an array A of positive lengths, return the largest perimeter of a triangle with non-zero area, formed from 3 of these lengths. If it is impossible to form any triangle of non-zero area, return 0. Example 1: Input: [2,1,2] Output: 5 Example 2: I

LeetCode 119 Pascal&#39;s Triangle II(帕斯卡三角形II)(vector、数学公式)(*)

翻译 给定一个索引K,返回帕斯卡三角形的第K行. 例如,给定K=3, 返回[1,3,3,1]. 注释: 你可以改进你的算法只用O(k)的额外空间吗? 原文 Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra sp

Leetcode:Triangle 三角形塔最小路径和

Triangle: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below. For example, given the following triangle [ [2], [3,4], [6,5,7], [4,1,8,3] ] The minimum path sum from top to botto

LeetCode:Pascal‘s Triangle II - 帕斯卡三角形2

1.题目名称 Pascal's Triangle II(帕斯卡三角形2) 2.题目地址 https://leetcode.com/problems/pascals-triangle-ii/ 3.题目内容 英文:Given an index k, return the kth row of the Pascal's triangle. 中文:给出行数k,返回帕斯卡三角形的第k行 例如,k=3时,返回[1,3,3,1] 4.解题方法1 帕斯卡三角形也叫杨辉三角形,在LeetCode第118题(Pas

LeetCode:Pascal‘s Triangle - 帕斯卡三角形

1.题目名称 Pascal's Triangle(帕斯卡三角形) 2.题目地址 https://leetcode.com/problems/pascals-triangle/ 3.题目内容 英文:Given numRows, generate the first numRows of Pascal's triangle. 中文:给出行数numRows,生成前numRows行的帕斯卡三角形 例如,当numRows为5时,生成的三角形是这样的: [      [1],     [1,1],    [

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

问题描述 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 示例 2: 输入:[1,2,1] 输出:0 示例 3: 输入:[3,2,3,4] 输出:10 示例 4: 输入:[3,6,2,3] 输出:8 解决方案 class Solution: def largestPerimeter(self, A): """ :type A: Lis