2.Kth Largest Element in a Stream
int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8Solution I: (Using a sorted array of size K)
class KthLargest
{
public:
vector<int> v;
int count;
KthLargest(int k, vector<int> &nums)
{
sort(nums.begin(), nums.end());
int x = nums.size();
count = k;
if (x >= k)
{
int i = x - k;
while (i < nums.size())
{
v.push_back(nums[i]);
i++;
}
}
else
{
v = nums;
}
}
int add(int val)
{
if (v.size() > 0)
{
if (val > v[0] && v.size() == count)
{
v[0] = val;
for (int i = 0; i < v.size() - 1; i++)
{
if (v[i + 1] < v[i])
{
int temp = v[i];
v[i] = v[i + 1];
v[i + 1] = temp;
}
}
}
else if (v.size() < count)
{
v.push_back(val);
for (int i = 0; i < v.size() - 1; i++)
{
if (v[i + 1] < v[i])
{
int temp = v[i];
v[i] = v[i + 1];
v[i + 1] = temp;
}
}
}
}
else
{
v.push_back(val);
}
return v[0];
}
};Solution II: (Using Min Heap)
Last updated