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)
  • 相关阅读:
    SOG Tactical Tomahawk F01T 飞虎
    90 压缩干粮 飞虎
    美国陆军国民警卫队不锈钢水瓶 ACU色 飞虎
    CentOS安装RabbitMQ
    如何将EXCEL表中的数据导入数据库中
    Silverlight中的WattingDialog
    WPF ProgressDialog
    DataGrid小扩展
    WPF报表控件
    Misc另外一个世界
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10933940.html
Copyright © 2011-2022 走看看