1. 程式人生 > >有兩個有序的資料,將他們合併並保持排序順序不變

有兩個有序的資料,將他們合併並保持排序順序不變

有兩個有序的資料 a[],b[], 他們都是升序的,將他們合併成資料c[] ,要求也是升序的
要求時間複雜度是 O(n)
請考慮邊界條件,避免程式出現異常

package xyz.songxl;

public class mergeArray {
    public static void main(String[] args) {

        int a[] ={1,3,5,7,7,10};
        int b[] ={-2,2 ,100};
        int c[] = merge(a,b);
        for (int i = 0; i < c.length; i++) {
            System.out.print(c[i]+"\t"
); } } /** * <p>有兩個有序的資料 a,b 現在要將他們合併成陣列c,要求也是升序的 * 要求時間複雜度是 O(n) * 請考慮邊界條件,避免程式出現異常 * </p> * @param a * @param b * @return */ public static int[] merge(int a[], int b[]) { int ia = 0,ib = 0,ic=0; // 各陣列的下標 int maxa = a.length; // 個數組的最大長度
int maxb = b.length; int maxc = maxa + maxb; int c[] = new int[maxc]; for ( ; ic < maxc; ic++) { if (ia<maxa && ib<maxb) { // 兩個陣列中都還有元素 比較大小 把小的資料放到陣列c if (a[ia]<= b[ib]) { c[ic] = a[ia]; ia++; }else
{ c[ic] = b[ib]; ib++; } }else if (ia<maxa && ib>=maxb) { // a陣列中還有資料,b 資料沒有了的情況 將a中剩下的資料拷貝到陣列c for ( ; ia < maxa; ia ++,ic++) { c[ic] = a[ia]; } // 或者直接使用資料拷貝函式 arraycopy 實現資料複製的功能 // System.arraycopy(a, ia, c, ic, maxa-ia); }else if (ia>=maxa && ib<maxb) {// b 陣列中還有資料,a 資料沒有了的情況 將b中剩下的資料拷貝到陣列c for ( ; ib < maxb; ib ++,ic++) { c[ic] = b[ib]; } // System.arraycopy(b, ib, c, ic, maxb-ib); } } return c; } }

相關推薦

有序資料他們合併保持排序順序

有兩個有序的資料 a[],b[], 他們都是升序的,將他們合併成資料c[] ,要求也是升序的 要求時間複雜度是 O(n) 請考慮邊界條件,避免程式出現異常 package xyz.songxl

給定有序陣列找出合併之後的陣列中位數

中位數定義:假如一個數組的長度Len為偶數,那麼中位數為第 Len/2 個數;如果Len為奇數,那麼中位數為第Len/2+1個數。 比如 Arr[ 1, 2, 3, 4, 5]中位數為3;Arr[ 2, 3, 4, 5]中位數為3。 給定兩個遞增排序陣列,請設計一種高效演算

由使用者輸入非遞減的資料他們仍然非遞減歸併。

#include<stdio.h> #include<stdlib.h> typedef struct LNode {int data;struct LNode* next; }LNode,*LinkList; int CreateList(Link

SDUT 3503 正整數求N!的K進制的位數

pos class 進制 amp code cpp ref clu lan 有兩個正整數,求N!的K進制的位數 題目鏈接:action=showproblem&problemid=3503">http://sdutacm.org/sdutoj/prob

習題2.5 有序鏈表序列的合(15 分)<疑問?L1 L2 沒辦法空>

測試 bsp rto 標準 結構定義 tail ret 回歸 一個 習題2.5 兩個有序鏈表序列的合並(15 分) 本題要求實現一個函數,將兩個鏈表表示的遞增整數序列合並為一個非遞減的整數序列。 函數接口定義: List Merge( List L1, List

資料結構-線性表- 01 “有序連結串列序列的合併” 問題

題目要求: 本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struc

php一個表單提交按鈕分別對應不同的處理頁面

通過隱藏表單hidden的屬性值應該可以解決 <form action="test.php" name='theForm'> <input type'hidden' name='act'> <input type="submit" name="ret

[資料結構]02-線性結構1 有序連結串列序列的合併

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struct Nod

設有n正整數他們連線成一排組成一個最大的多位整數。 如:n=3時3整數13,312,343,連成的最大整數為34331213。

題目描述 設有n個正整數,將他們連線成一排,組成一個最大的多位整數。 如:n=3時,3個整數13,312,343,連成的最大整數為34331213。 如:n=4時,4個整數7,13,4,246連線成的最大整數為7424613。 輸入描述: 有多組測試樣例,每組測試樣例包含兩行,第一行為一

MOOC陳越資料結構第二週02-線性結構1 有序連結串列序列的合併 (15 分)

首先讀題,題目中說L1,L2都為含頭節點的,第一次做的時候沒有認真讀題以為不帶頭節點,傳出的連結串列也要求帶頭節點。 程式碼 List Merge(List L1,List L2){ List pa,pb,pc,L; L = (List)malloc(si

【浙大資料結構題集】習題2.5 有序連結串列序列的合併

題目連結 題意:兩個有序連結串列的合併,輸出的合併後的非遞減連結串列。 思路:主要是輸入和合並兩個函式,輸入用的尾插法,合併則是一一比較,複雜度O(m+n). 程式碼: #include <

mooc浙大資料結構02-線性結構1 有序連結串列序列的合併

題目:02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 ); 其中List結構定義如下:typedef struct

連結串列第一升序第二降序合併為一個升序連結串列(C++)

#include <iostream> #define NULL 0 using namespace std; struct Node { char data; Node* next; }; Node* create() { Node* head

lintcode 二進位制求和 給定二進位制字串返回他們的和(用二進位制表示)。

Lintcode容易題 二進位制求和 檢視執行結果  15:00  Start 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 您在真實的面試中是否遇到過這個題?  Yes 樣例 a = 11 b = 1 返回 100 標籤 字串

Python練習題8(替換相同的字符串輸出):輸入字母串字母串都包含的字母用'_'替換後輸出字母串的剩余部分 (能為空串區別大小寫只能包含字母)

format pre 兩個 div form tput nco encode col 方法一:檢查輸入是否為空串,循環字母串,相同的則替換,然後再用replace()方法去除,輸出想要的結果 1 def str_replace(messages1,messages2):

Python練習題8(替換相同的字串輸出):輸入字母串字母串都包含的字母用'_'替換後輸出字母串的剩餘部分 (能為空串區別大小寫只能包含字母)

方法一:檢查輸入是否為空串,迴圈字母串,相同的則替換,然後再用replace()方法去除,輸出想要的結果 1 def str_replace(messages1,messages2): 2 if messages1.strip() == '' or messages2.strip() ==

有序陣列從中各取一個組成pair求和最小的前Kpair(楊氏矩陣top k問題)

 不需要把所有的pair放進優先佇列,每次只放當前數的下邊和右邊的數,其他更遠的數,肯定比這兩個數更大, vector<pair<int, int>> topKPair(vector<int> &A, vector<int

有序陣列A[k]和B[k]長度都為k。求前k最小的(a[i]+b[j])

設A={A1,A2,A3,A4,A5,A6,.......} ,B={B1,B2,B3,B4,B5,B6,.......} 因為A和B都是有序的陣列,必須充分的利用這點,可能有同學,看到有同學覺得這個題目比較容易,直接將所有的組合都計算出來,然後取最小的K個,其實出題的人是