2020.08.02 -LeetCode

92 阅读1分钟

三角形三条边之和

public static void main(String[] args) {
        int[] A = {1, 5, 6, 3, 4};

        int res = triangleNumber(A);
        System.out.println(res);
    }

    /**
     * 数组中有多少个组合可以成为三角形
     *
     * @param A
     * @return
     */
    public static int triangleNumber(int[] A) {
        Arrays.sort(A);
        int count = 0, n = A.length;
        for (int i = n - 1; i >= 2; i--) {
            int l = 0, r = i - 1;
            while (l < r) {
                if (A[l] + A[r] > A[i]) {
                    count += r - l;
                    //l左边的跟当前A[r]相加,肯定是小于A[i]的
                    //所以 l左边的跟当前A[r] 肯定也是小于A[i]的
                    r--;
                } else {
                    l++;
                }
            }
        }
        return count;
    }