using System.Collections.Generic;
public static void Main()
PriorityQueue<int, int> maxHeap =
new PriorityQueue<int, int>(Comparer<int>.Create((a,b) => b - a));
while(maxHeap.Count > 0) {
var v = maxHeap.Dequeue();
Console.WriteLine($"{v}");
Console.WriteLine("Hello World");
public int FindKthLargest(int[] nums, int k) {
var k_ind = nums.Length - k;
return QuickSelect(nums, 0, nums.Length - 1, k_ind);
private int QuickSelect(int[] nums, int low, int high, int k){
var pi = r.Next(low, high + 1);
}else if(nums[i] > pivot){
if(k >= start && k <= end)
return QuickSelect(nums, low, start - 1, k);
return QuickSelect(nums, end+1, high, k);
private void Swap(int[] nums, int i, int j){
public int FindKthLargest(int[] nums, int k) {
var priorityQ = new PriorityQueue<int, int>();
if (priorityQ.Count > k){
public int findKthLargest(int[] nums, int k) {
List<int> list = new List<int>();
foreach (int num in nums) {
return quickSelect(list, k);
public int quickSelect(List<int> nums, int k) {
int pivotIndex = new Random().Next()% nums.Count;
int pivot = nums[pivotIndex];
List<int> left = new List<int>();
List<int> mid = new List<int>();
List<int> right = new List<int>();
foreach (int num in nums) {
} else if (num < pivot) {
return quickSelect(left, k);
if (left.Count + mid.Count < k) {
return quickSelect(right, k - left.Count - mid.Count);
public int findKthLargest(int[] nums, int k) {
int minValue = int.MaxValue;
int maxValue = int.MinValue;
foreach (int num in nums) {
minValue = Math.Min(minValue, num);
maxValue = Math.Max(maxValue, num);
int[] count = new int[maxValue - minValue + 1];
foreach (int num in nums) {
for (int num = count.Length - 1; num >= 0; num--) {