Given an array A[] of measurement N such that each factor is a constructive energy of two. In a single operation, select a non-empty subsequence of the array and multiply all the weather of the subsequence with any constructive integer such that the sum of the array turns into an influence of two. The duty is to attenuate this operation.
Examples:
Enter: S = {4, 8, 4, 32}
Output:
1
5
{4}
Clarification: Select a subsequence {4} and multiplying it by 5
turns the array into [20, 8, 4, 32], whose sum is 64 = 26.
Therefore minimal variety of operations required to make
sum of sequence into energy of two is 1.Enter: S = {2, 2, 4, 8}
Output: 0
Clarification: The array already has a sum 16 which is energy of two.
Strategy: The issue may be solved primarily based on the next commentary:
Observations:
If the sum of sequence is already energy of two, we’d like 0 operations.
In any other case, we are able to make do itusing precisely one operation.
- Let S be the sum of the sequence. We all know that S shouldn’t be an influence of two. After some variety of operations, allow us to assume that we obtain a sum of twor.
- S < 2r: It’s because, in every operation we multiply some subsequence with a constructive integer. This may improve the worth of the weather of that subsequence and thus the general sum.
- Which means we now have to extend S a minimum of to 2r such that 2r−1 < S < 2r. For this, we have to add 2r − S to the sequence.
Let M denote the smallest factor of the sequence. Then 2r − S is a a number of of M.To transform S to 2r, we are able to merely multiply M by (2r − (S − M)) / M. This may take just one operation and make the sum of sequence equal to an influence of two. The chosen subsequence within the operation solely consists of M.
Comply with the steps talked about beneath to implement the thought:
- Test if the sequence is already the ability of two, the reply is 0.
- In any other case, we require only one operation
- Let S be the sum of the sequence (the place S shouldn’t be an influence of two) and r be the smallest integer such that S < 2r.
- In a single operation, we select the smallest variety of the sequence (M) and multiply it with X = 2r − (S − M) / M.
- Print the factor whose worth is minimal within the array.
Under is the implementation of the above strategy:
Java
|
Time Complexity: O(N)
Auxiliary Area: O(1)