Science, asked by eshwarm1999, 9 months ago

program for aFirst line contains three space separated integers N and W and D respectively, which denote N - size of array W - window size D - difference Second line contains of N space separated integers denoting the elements of the array

Answers

Answered by sus47
0

A simple method is to pick all elements one by one. For every picked element, count its occurrences by traversing the array, if count becomes more than n/k, then print the element. Time Complexity of this method would be O(n2).

A better solution is to use sorting. First, sort all elements using a O(nLogn) algorithm. Once the array is sorted, we can find all required elements in a linear scan of array. So overall time complexity of this method is O(nLogn) + O(n) which is O(nLogn).

Following is an interesting O(nk) solution:

We can solve the above problem in O(nk) time using O(k-1) extra space. Note that there can never be more than k-1 elements in output (Why?). There are mainly three steps in this algorithm.

1) Create a temporary array of size (k-1) to store elements and their counts (The output elements are going to be among these k-1 elements). Following is structure of temporary array elements.

struct eleCount {

int element;

int count;

};

struct eleCount temp[];

This step takes O(k) time.

2) Traverse through the input array and update temp[] (add/remove an element or increase/decrease count) for every traversed element. The array temp[] stores potential (k-1) candidates at every step. This step takes O(nk) time.

3) Iterate through final (k-1) potential candidates (stored in temp[]). or every element, check if it actually has count more than n/k. This step takes O(nk) time.

The main step is step 2, how to maintain (k-1) potential candidates at every point? The steps used in step 2 are like famous game: Tetris. We treat each number as a piece in Tetris, which falls down in our temporary array temp[]. Our task is to try to keep the same number stacked on the same column (count in temporary array is incremented).

Consider k = 4, n = 9

Given array: 3 1 2 2 2 1 4 3 3

i = 0

3 _ _

temp[] has one element, 3 with count 1

i = 1

3 1 _

temp[] has two elements, 3 and 1 with

counts 1 and 1 respectively

i = 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 1, 1 and 1 respectively.

i = 3

- - 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 1, 1 and 2 respectively.

i = 4

- - 2

- - 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 1, 1 and 3 respectively.

i = 5

- - 2

- 1 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 1, 2 and 3 respectively.

Now the question arises, what to do when temp[] is full and we see a new element – we remove the bottom row from stacks of elements, i.e., we decrease count of every element by 1 in temp[]. We ignore the current element.

i = 6

- - 2

- 1 2

temp[] has two elements, 1 and 2 with

counts as 1 and 2 respectively.

i = 7

- 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 1, 1 and 2 respectively.

i = 8

3 - 2

3 1 2

temp[] has three elements, 3, 1 and 2 with

counts as 2, 1 and 2 respectively.

Finally, we have at most k-1 numbers in temp[]. The elements in temp are {3, 1, 2}. Note that the counts in temp[] are useless now, the counts were needed only in step 2. Now we need to check whether the actual counts of elements in temp[] are more than n/k (9/4) or not. The elements 3 and 2 have counts more than 9/4. So we print 3 and 2.

Answered by vanikapa14
0

Answer

print the sum of elements in an array

Explanation:

Similar questions