Embedded System Interview: TapeEquilibrium

Hot

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

Thứ Sáu, 17 tháng 1, 2020

TapeEquilibrium

tháng 1 17, 2020 0
A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.

Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].

The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|

In other words, it is the absolute difference between the sum of the first part and the sum of the second part.

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

We can split this tape in four places:

        P = 1, difference = |3 − 10| = 7
        P = 2, difference = |4 − 9| = 5
        P = 3, difference = |6 − 7| = 1
        P = 4, difference = |10 − 3| = 7

Write a function:

    int solution(vector<int> &A);

that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.

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

the function should return 1, as explained above.

Write an efficient algorithm for the following assumptions:

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


#include <limits>

int solution(vector<int> &A) {
 // write your code in C++11 (g++ 4.8.2)
 vector<int> pre_sum;
 int s = 0;
 for (auto i: A) {
        s += i;
        pre_sum.push_back(s);
    }
 
 int min_abs_diff = numeric_limits<int>::max();
 for (size_t i = 1; i < pre_sum.size(); i++) {
 int abs_diff = abs(pre_sum[i - 1] * 2 - pre_sum[pre_sum.size() - 1]);
        min_abs_diff = min(min_abs_diff, abs_diff);
    }
 
 return min_abs_diff;
}
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