![]() |
1
7
一个简单的方法是维护两个分类的容器,一个比中位数低,一个更大。 当你找到一个新元素时,看看要把它插入哪个容器(这样所有较低的元素总是小于或等于所有较高的元素),然后重新平衡计数,这样中位数就在它们之间的“中间”。
您的可以这样做,但将较低的范围定义为
维护两个已分拣的容器,
假设你有这样一对容器,如果你想添加一个元素
接下来,保持不变1:如果
如果我们从
|
![]() |
2
3
您似乎试图做的是(错误地,使用发布的代码)将值保持在一个多集中,迭代器指向中值,并在每次添加到集时根据添加的值是高于还是低于中值来调整指针。
这是一个很好的设计,可能也是解决这个问题最快的方法。然而,它不适用于
因此,如果你想以这种方式解决问题,你需要实现你自己的rbtree或其他集合抽象,以提供这一关键信息。或者,当插入一个等于旧中值的值时,可以从头开始对中值进行再融资(这是一种昂贵的操作,但应该很少)。 编辑 提示OP使代码与C++11多集一起工作:
|
![]() |
3
1
用一个怎么样
编辑
为了进行比较,我使用
这7行逻辑还不错,但肯定不太清楚发生了什么,我不能仅仅通过看它来判断它是否正确。请注意,此算法仅适用于
总而言之,我认为
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |