一、题目:
7-3 两个有序序列的中位数。
二、问题描述:
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,?,AN?1的中位数指A(N?1)/2的值,即第?(N+1)/2?个数(A0为第1个数)。
三、算法描述:
首先要对两个等长数组进行重新排序,可以考虑直接合并再排序或者新建一个数组进行排序。合并再排序要多次移动数据,运算次数较多,因此我选择了新建一个数组,边导入数据边进行排序。
因为两个等长数组的排列是有规律的(由小到大),所以我可以直接比较两个数组的第一个数的大小,然后选择较小的一个放到新的数组中,然后被取出数据的那个数组的第二个数与另一个数组的第一个数比较,依然是取出较小的一个,以此重复,直到两个数组中的所有元素均被取出。
四、算法时间及空间复杂度分析
时间复杂度:
最好的情况:当一个数组中的全部元素均小于另一个数组的第一个数时,比较次数为N。
最坏的情况:当两个数组中的元素全都有交错时每两个元素都要进行一次比较,比较次数为2N。
所以时间复杂度为O(N)。
空间复杂度:
会随数组长度的增加而等量增加,O(N)
五、心得体会
该算法简答易行,容易设计,但是时间复杂度和空间复杂度相对较高,以后需要在老师的指导下,重新斟酌算法,做出时间和空间复杂度更低的算法。
原文地址:https://www.cnblogs.com/RainParrot/p/9784045.html
时间: 2024-10-07 16:46:32