有兩個有序的資料,將他們合併並保持排序順序不變
有兩個有序的資料 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
將帶頭結點的單鏈表分解成兩個單鏈表,使其中一個含奇數號元素另一個含偶數號元素,並保持相對順序不變
#include "stdafx.h" #include<stdio.h> #include<malloc.h> #include<stdlib.h> typed
給定兩個有序陣列,找出合併之後的陣列中位數
中位數定義:假如一個數組的長度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
.建立一個視窗程式(JFrame),標題欄起名為“瀏覽器”,有一個選單條,有“檔案”、“編輯”、“檢視”3個選單。“檔案”選單有兩個選單項,一項是“開啟”,一項是“儲存”,“開啟”項做成子選單,有兩個
import javax.swing.*; public class Example { public static void main(String[] args) { Window win=
有兩個連結串列,第一個升序,第二個降序,合併為一個升序連結串列(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,求和最小的前K個pair(楊氏矩陣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個,其實出題的人是