我正在尝试使用排序集来解决运行中值问题(在hackerrank上)。只有它的元素没有正确排序。为什么不能使用SortedSet作为优先级队列或Min-Heap?
看到它在这里的行动:http://rextester.com/NGBN25779
public class RunningMedian{
List<int> list = new List<int>();
SortedSet<int> sorted = new SortedSet<int>();
public void Add(int num){
list.Add(num);
sorted.Add(num);
}
public double MedianNotWorking(){
return GetMedian(sorted.ToArray());
}
public double MedianWorking(){
int[] arr = list.ToArray();
Array.Sort(arr);
return GetMedian(arr);
}
public double GetMedian(int[] arr){
int idx = list.Count/2;
if(arr.Length % 2 == 0){
return (double)((double)(arr[idx] + arr[idx-1])/2);
}else{
return arr[idx];
}
}
}
static void Main(String[] args) {
int n = Convert.ToInt32(Console.ReadLine());
int[] a = new int[n];
RunningMedian heap = new RunningMedian();
for(int i = 0; i < n; i++){
a[i] = Convert.ToInt32(Console.ReadLine());
heap.Add(a[i]);
//double median = heap.GetMedian();
double median = heap.MedianNotWorking();
Console.WriteLine(median.ToString("F1"));
}
}
对于有序集合不工作的大部分。然而,在较大的输入尺寸下,它开始给出错误的答案。这可能不是问题的最佳解决方案,但我很好奇它为什么失败。 C#没有min-heap/priority队列,那么为什么不能使用排序的集合作为替代?
*编辑为包含hackerrank的完整代码。
这是一个输入文件。 输入 http://textuploader.com/dovni
预期 http://textuploader.com/dovnb
输出 http://textuploader.com/dovwj
冲突出现近终点
预期 (跳过1-364) 54240.0 54576.5 54913.0 54576.5 54240.0
结果 (跳过1-364) 54240.0 54576.5 54913.0 54963.0 54576.5
对于哪个输入值示例代码失败?请编辑您的问题以包含使用您的RunningMedian类的代码,以便我们可以看到(并尝试)为什么失败。 – Progman
已更新,其中包含完整的代码,输入,输出和预期。 – Boyd