Skip to content
Advertisement

Code for updating the each element(binary) of array on the basis of majority voting of past 5 elements(including that element also)

I have an issue in writing a code for a problem related to the element updation of an array based on the majority voting of its past 5 elements including the element itself.

Explanation: Suppose we have an array having elements in binary form. arr= [0 , 1, 0, 0, 0, 1, 0, 1 , 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1]

Now, according to our problem, we have to find the majority value of the past 5 elements including the number itself. So for the first 4 elements, the new updated value would be Zero, and then the value at the 4th index will be based on the majority voting of past elements that is [0, 1, 0, 0, 0]. So the majority value for index 4 is ‘0’ as the count of ‘0’ is greater than the count of ‘1’ in a given window. Similarly, we have to do the same for all the elements.

input arr= [0 , 1, 0, 0, 0, 1, 0, 1 , 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1]

Output arr=[0 , 0, 0, 0, 0, 0, 0, 0 , 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]

Advertisement

Answer

Use:

arr = [0 , 1, 0, 0, 0, 1, 0, 1 , 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1]
out = [int(sum(arr[max(i-5, 0):i]) >= 3) for i in range(1, len(arr)+1)]
print(out)

# Output
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]

Variation:

out = [int(sum(arr[max(i-4, 0):i+1]) >= 3) for i in range(len(arr))]
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement