k largest(or smallest) elements in an array | Amazon Interview Questions

k largest(or smallest) elements in an array | added Min Heap method,Amazon Interview Questions,

 

How to Find k largest(or smallest) elements in an array?

Question: Write an efficient program for printing k largest elements in an array. Elements in an array can be in any order.
For example, if the given array is [1, 23, 12, 9, 30, 2, 50] and you are asked for the largest 3 elements i.e., k = 3 then your program should print 50, 30, and 23.


 Solutions:
we can use three methods to Find k largest(or smallest) elements in an array.

Method 1 (Use Bubble k times) 

1) Modify Bubble Sort to run the outer loop at most k times. 
2) Print the last k elements of the array obtained in step 1.
Time Complexity: O(n*k) 

Like Bubble sort, other sorting algorithms like Selection Sort can also be modified to get the k largest elements.


Method 2 (Use temporary array) 
K largest elements from arr[0..n-1]

1) Store the first k elements in a temporary array temp[0..k-1]. 
2) Find the smallest element in temp[], let the smallest element be min
3-a) For each element x in arr[k] to arr[n-1]. O(n-k) 
If x is greater than the min then remove min from temp[] and insert x
3-b)Then, determine the new min from temp[]. O(k) 
4) Print final k elements of temp[]

Time Complexity: O((n-k)*k). If we want the output sorted then O((n-k)*k + k*log(k))

Method 3(Use Sorting) 

1) Sort the elements in descending order in O(n*log(n)) 
2) Print the first k numbers of the sorted array O(k). 

Following is the implementation of the above.  


CODE :

// C++ code for k largest elements in an array
#include <bits/stdc++.h>
using namespace std;
 
void kLargest(int arr[], int n, int k)
{
    // Sort the given array arr in reverse
    // order.
    sort(arr, arr + n, greater<int>());
 
    // Print the first kth largest elements
    for (int i = 0; i < k; i++)
        cout << arr[i] << " ";
}
 
// driver program
int main()
{
    int arr[] = { 1, 23, 12, 9, 30, 2, 50 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 3;
    kLargest(arr, n, k);
}
 


Men' fashion , Dating Tips , Relationship Advice

Post a Comment