zoukankan      html  css  js  c++  java
  • 976. 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:

    Input: [1,2,1]
    Output: 0
    

    Example 3:

    Input: [3,2,3,4]
    Output: 10
    

    Example 4:

    Input: [3,6,2,3]
    Output: 8

    Note:

    1. 3 <= A.length <= 10000
    2. 1 <= A[i] <= 10^6

    Approach #1: Math. [Java]

    class Solution {
        public int largestPerimeter(int[] A) {
            
            Arrays.sort(A);
            
            int n = A.length;
           
            // Integer[] arr = new Integer[A.length];
            // for (int i = 0; i < A.length; ++i)
            //     arr[i] = A[i];
            
            // Arrays.sort(A, new Comparator<Integer>() {
            //     @Override
            //     public int compare(Integer a, Integer b) {
            //         return b - a;
            //     }
            // });
            
            // Arrays.sort(arr, (Integer a, Integer b) -> b - a);
            
            // Arrays.sort(arr, Collections.reverseOrder());
    
            for (int i = n - 1; i >= 0; --i) {
                for (int j = i - 1; j >= 0; --j) {
                    for (int k = j - 1; k >= 0; --k) {
                        if (A[k] + A[j] > A[i]) {
                            return A[k] + A[j] + A[i];
                        }
                    }
                }
            }
    
            return 0;
        }
    }
    

      

    Analysis:

    There three ways to realise reverse array, but the permise is that array's type must is object. so we have to change the type of A, If we do so, it will TEL. 

    Approach #2: Math. [Java]

    class Solution {
        public int largestPerimeter(int[] A) {
            int c = max(A);
            int b = max(A);
            int a = max(A);
            for(int i = 2; i < A.length; i++) {
                if(c < a + b)
                    return a + b + c;
                else {
                    c = b;
                    b = a;
                    a = max(A);
                }
            }
            return 0;
        }
        
        int max(int[] A) {
            int m = A[0];
            int index = 0;
            for(int i = 1; i < A.length; i++) {
                if(A[i] > m) {
                    m = A[i];
                    index = i;
                }
            }
            A[index] = -1;
            return m;
        }
    }
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    接口框架 python+unittest+request+HTMLTestRunner
    python循环语句的简单条件语句、多重条件语句和嵌套条件语句编写
    MAC下配置java+jmeter环境变量
    jmeter _Random函数生成随机数
    python-unittest模块中的各类断言
    Django密码错误报错提醒
    转载Django 500,404,400错误修改优化
    postman从body,headers,data中获取token后回写做全局变量
    postman小白教程
    git拉取代码切换分支
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10933940.html
Copyright © 2011-2022 走看看