目的:使用STL的vector模板设计并实现顺序表应用场合的一些简单算法设计。
应用7:一个长度为L(L>=1)的升序序列S,处在第[L/2]个位置的元素称为S的中位数。例如,若序列S1 = (11,13,15,17,19),则S1的中位数为15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列S2 = (02,04,06,08,20),则S1和S2的中位数为11。假设以两个元素依值递增有序排列的线性表A和B分别表示两个升序序列(即同一表中的元素值各不相同),现要求设计在时间和空间两方面都尽可能高效的算法,找出两个长度相同的升序序列A和B的中位数。
参考函数原型: template<class ElemType> ElemType Search_Mid( const vector<ElemType> &A, const vector<ElemType> &B );第一行:有序序列的长度
第二行:有序序列A的数据元素(数据元素之间以空格分隔)
第三行:有序序列B的数据元素(数据元素之间以空格分隔)
第一行:序列A的遍历结果
第二行:序列B的遍历结果
空行
第三行:序列A和B的中位数
按照思路二,不用暴力法求解,得到的结果如上。有一个样例没有通过的。根据中位数的特性,盲猜有两种情况,一种是最终综合的向量的数量是偶数的,另外一种综合的向量元素数量是奇数
综合向量元素个数是偶数
综合向量元素个数是奇数
这里就不对了,理论上来说应该是11,不是6。根据最终的综合向量的元素的个数,采取相应的提取中位数的特征 增加判定奇偶的情况,再根据这个进行输出。结果如下 好吧,我改错了,对比一下两种错误提示,猜一下样例。有两种输入模式,字符串或者是整型,但是我就是按照字符串进行的输入的,为什么会错?屈服了,毕竟还有别的任务,又花了一分去买样例!!!!真的是。。。字符的中位数又有什么意义?虽然不是这个问题的锅,还是奇偶,不过刚才不是改过了吗?为甚还是在奇偶上出问题? 实际上想到了奇偶是对的,而且已经解决了,你有两个问题!关于相同元素的处理上是有问题的。 A的遍历索引是i,B的遍历索引是j,居然写错了,而且白浪费了我一分,买了一个已经猜准的样例!😔然后执行效果如下,居然!!!!!!另外样例没有通过的!!!居然!!! 心态炸了,没有奇偶判定的时候,这个居然还对了,有奇偶判定的时候这个居然还错了,这说明了说么?说明有了奇偶判断之后,这种情况被判定到奇数的情况。可是对2整除之后,除了0和1,还有什么。说明这个向量的长度是奇数,但是应该按照偶数进行的输出。又理了一遍思路,真的想不出来了。。。。。这个东西好像看多了,会上瘾的!!!!!!又花了一分!! 心里有点失衡了! 是我没有理解题意吗?没有理解中位数的概念吗?九个数,中位数不是中间那一个吗?惊得我回去重新审视了一下题目!五个数,不就取中间那个吗?第一个样例,不也是取中间那个吗?九比较特殊?
源码等期限过了再放,查重大家都重写不好!看到这了,可否小评一下
这里是有问题的,我自己设想他会删除重复元素,但是实际上并没有删除的重复的元素。而是将所有的元素的都插入其中,在两个序列的综合序列中对两个序列的所有元素进行的排序,即使重复不删除