已知有兩個等長的非降序序列S1, S2, 設計函數求S1與S2並集的中位數。有序序列A​


7-3 兩個有序序列的中位數 (20 分)

已知有兩個等長的非降序序列S1, S2, 設計函數求S1與S2並集的中位數。有序序列A0​​,A1​​,,AN1​​的中位數指A(N1)/2​​的值,即第(N+1)/2⌋個數(A0​​為第1個數)。

輸入格式:

輸入分三行。第一行給出序列的公共長度N(0<N≤100000),隨后每行輸入一個序列的信息,即N個非降序排列的整數。數字用空格間隔。

輸出格式:

在一行中輸出兩個輸入序列的並集序列的中位數。

輸入樣例1:

5
1 3 5 7 9
2 3 4 5 6

輸出樣例1:

4

輸入樣例2:

6
-100 -10 1 1 1 1
-50 0 2 3 4 5

輸出樣例2:

1

問題分析:將兩個有序數組合並,並按照從小到大的順序,且須得出並集(即去重)
源代碼如下:
#include<iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    int a1[n];
    int a2[n];
    int a3[2*n];
    for(int i=0;i<n;i++){
        cin>>a1[i];
    }
    for(int i=0;i<n;i++){
        cin>>a2[i];
    }
    int a,b,c;
    a=0,b=0,c=0;//這是三個數組的指針
    while(a<n && b<n){/比較a1指針數和a2指針數的大小關系,小的進入a3
        if(a1[a]<a2[b]){
            a3[c++]=a1[a++];
        }
        else{
            a3[c++]=a2[b++];
        }        
    }
    while(a<n){//如果a1合並之后還有剩余,則進入a3
        a3[c++]=a1[a++];
    }
    while(b<n){
        a3[c++]=a2[b++];
    }
    cout<<a3[(c-1)/2];
}

 


三、時間復雜度和空間復雜度的分析
該算法的空間復雜度主要是額外定義了三個指針和建立一個合並數組,所以空間復雜度是O(n)
時間復雜度是while循環實現的,所以時間復雜度是T = O(n)

感想:這道題是歸並排序中的歸並數組這一步驟,所以主要是比較要進入數組的數值大小,小的進入目標數組。如果合並步驟結束,還要判斷一下是否其中一個數組有數字剩余。
通過本次的實驗,讓我收獲到了對題意要有充分的理解才能更好的完成這道題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 8、將兩個字符串s1,s2進行比較,如果s1>s2,則輸出一個正數。如果s1 = s2,輸出零。如果s1 < s2, 輸出一個負數,不用strcmp函數,輸出的正數或者負數的絕對值應該是比較兩字符串相應字符的ascii碼的差值。 為什么 String s1="hello" String s2 = new String("hello") s1==s2 為flase 編寫一個程序,將連個字符串s1和s2比較,如果s1 > s2,輸出一個整數;若s1 = s2,輸出0;若s1 < s2,輸出一個負數。不要用strcpy函數。兩個字符串用gets函數讀入。輸出的正數或負數的絕對值應是相比較的兩個字符串相對應字符的ASCII碼的差值。例如,"A"和“C”相比,由於"A" < "C",應輸出負數,同時由於‘A’與‘C’的ASCII碼差值為2,因此應輸出"-2" 寫一個函數,實現兩個字符串的比較。即實現strcmp函數,s1=s2時返回0,s1!=s2時返回二者第一個不同字符的ASCII值。 編寫一個程序,將兩個字符串s1和s2比較,如果s1 > s2,輸出一個整數;若s1 = s2,輸出0;若s1 < s2,輸出一個負數。不要用strcpy函數。兩個字符串用gets函數讀入。輸出的正數或負數的絕對值應是相比較的兩個字符串相對應字符的ASCII碼的差值。 計算機S0、S1、S2、S3、S4、S5狀態 ACPI電源管理中的S0 S1 S2 S3 S4 S5 計算機S0、S1、S2、S3、S4、S5狀態 寫一函數,實現兩個字符串的比較。即自己寫一個strcmp函數,函數原型為int strcmp(char * p1 ,char * p2); 設p1指向字符串s1, p2指向字符串s2。要求當s1=s2時,返回值為0;若s1≠s2,返回它們二者第1個不同字符的ASCII碼差值(如"BOY"與"BAD" 電源選項中S1,S2,S3,S4,S5的含義
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM