Embedded System Interview: CountTriangles

Hot

Hiển thị các bài đăng có nhãn CountTriangles. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn CountTriangles. Hiển thị tất cả bài đăng

Thứ Hai, 20 tháng 1, 2020

CountTriangles

tháng 1 20, 2020 0
An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if it is possible to build a triangle with sides of lengths A[P], A[Q] and A[R]. In other words, triplet (P, Q, R) is triangular if 0 ≤ P < Q < R < N and:

        A[P] + A[Q] > A[R],
        A[Q] + A[R] > A[P],
        A[R] + A[P] > A[Q].

For example, consider array A such that:
  A[0] = 10    A[1] = 2    A[2] = 5
  A[3] = 1     A[4] = 8    A[5] = 12

There are four triangular triplets that can be constructed from elements of this array, namely (0, 2, 4), (0, 2, 5), (0, 4, 5), and (2, 4, 5).

Write a function:

    int solution(vector<int> &A);

that, given an array A consisting of N integers, returns the number of triangular triplets in this array.

For example, given array A such that:
  A[0] = 10    A[1] = 2    A[2] = 5
  A[3] = 1     A[4] = 8    A[5] = 12

the function should return 4, as explained above.

Write an efficient algorithm for the following assumptions:

        N is an integer within the range [0..1,000];
        each element of array A is an integer within the range [1..1,000,000,000].


#include <algorithm>

int solution(vector<int> &A) {
    // write your code in C++11 (g++ 4.8.2)
    int s = int(A.size());
    
    if (s < 3) return 0;
    
    sort(A.begin(), A.end());
    
    if (A[0] + A[1] > A[s - 1]) {
        return s * (s - 1) * (s -2) / 6;
    }
    
    int num = 0;
    int start = 0;
    int end = 0;
    for (int i = 0; i < s -2; i++) {
        for (int j = i + 1; j < s - 1; j++) {
            for (int k = j + 1; k < s; k++) {
                if (A[i] + A[j] > A[k]) {
                    num++;
                } else {
                    break;
                }
            }
        }
    }
    
    return num;
}
Read More
Thường mất vài phút để quảng cáo xuất hiện trên trang nhưng thỉnh thoảng, việc này có thể mất đến 1 giờ. Hãy xem hướng dẫn triển khai mã của chúng tôi để biết thêm chi tiết. Ðã xong