Embedded System Interview: PassingCars

Hot

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

Chủ Nhật, 19 tháng 1, 2020

PassingCars

tháng 1 19, 2020 0
A non-empty array A consisting of N integers is given. The consecutive elements of array A represent consecutive cars on a road.

Array A contains only 0s and/or 1s:

        0 represents a car traveling east,
        1 represents a car traveling west.

The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.

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

We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).

Write a function:

    int solution(vector<int> &A);

that, given a non-empty array A of N integers, returns the number of pairs of passing cars.

The function should return −1 if the number of pairs of passing cars exceeds 1,000,000,000.

For example, given:
  A[0] = 0
  A[1] = 1
  A[2] = 0
  A[3] = 1
  A[4] = 1

the function should return 5, as explained above.

Write an efficient algorithm for the following assumptions:

        N is an integer within the range [1..100,000];
        each element of array A is an integer that can have one of the following values: 0, 1.


int solution(vector<int> &A) {
    // write your code in C++11 (g++ 4.8.2)
    vector<int> pre_sum(A.size(), 0);
    
    int s = 0;
    for (size_t i = 0; i < A.size(); i++) {
        s += A[i];
        pre_sum[i] = s;
    }
    
    int res = 0;
    
    for (int i = int(A.size() - 1); i >= 0; i--) {
        if (A[i] == 0) {
            res += (pre_sum[A.size() - 1] - pre_sum[i]);
            if (res > 1000000000) return -1;
        }
    }
    
    return res;
}
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