java 合併兩個陣列 三種解法
package datastruct.usearray;
import java.util.Arrays;
import java.util.LinkedList;
/**
* 合併兩個陣列 int a[]={0,1,5,6,7,9,14};
int b[]={2,4,8,10,13};
*
*/
public class MergeTwoArray {
//方法一:
private static void method1(int a[],int b[],int array[]) {
//建立c陣列,並將a新增進去
int c[]= Arrays.copyOf(a, a.length+b.length);
//將b陣列新增到已經含有a陣列的c陣列中去
System.arraycopy(b, 0, c, a.length, b.length);
//對c陣列進行排序
Arrays.sort(c);
System.out.println("方法一:");
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+" ");
}
}
//方法二:集合方法 使用LinkedList 佇列
private static void method2(int array[],LinkedList<Integer> queue_a,LinkedList<Integer> queue_b ) {
//每迴圈一次,新增一個最小元素進入arrays
for (int i = 0; i < array.length; i++) {
//兩個佇列都不為空時,誰小取出誰
if (!queue_a.isEmpty()&&!queue_b.isEmpty()) {
if (queue_a.peek()<queue_b.peek()) {
array[i]=queue_a.poll();
continue;
}else {
array[i]=queue_b.poll();
continue;
}
}
//當陣列a為空時,取陣列b的元素
if (queue_a.isEmpty()&&!queue_b.isEmpty()) {
array[i]=queue_b.poll();
continue;
}
//當陣列b為空時,取陣列a的元素
if (queue_b.isEmpty()&&!queue_a.isEmpty()) {
array[i]=queue_a.poll();
continue;
}
}
System.out.println("方法二:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
//方法三:遞迴方法
private static int [] method3(int a[],int a_start,int b[],int b_start,int array[],int array_start) {
//若陣列a中的元素都已經放到array陣列中,而陣列b未全部放到array中,
//那麼將b中剩餘的元素放到array中
if (a_start>=a.length) {
for (int i = array_start; i < array.length; i++) {
array[array_start]=b[b_start++];
}
return array;
}
//若陣列b中的元素都已經放到array陣列中,而陣列a未全部放到array中,
//那麼將a中剩餘的元素放到array中
if (b_start>=b.length) {
for (int i = array_start; i < array.length; i++) {
array[array_start]=a[a_start++];
}
return array;
}
//將陣列的頭元素,b陣列頭元素 中的最小值賦予給array
if (a[a_start]<b[b_start]) {
array[array_start]=a[a_start];
return method3(a, a_start+1, b, b_start, array, array_start+1);
}else {
array[array_start]=b[b_start];
return method3(a, a_start, b, b_start+1, array, array_start+1);
}
}
public static void main(String[] args) {
int a[]={0,1,5,6,7,9,14};
int b[]={2,4,8,10,13};
LinkedList<Integer> queue_a=new LinkedList<>();
for (int i = 0; i < a.length; i++) {
queue_a.offer(a[i]);
}
LinkedList<Integer> queue_b=new LinkedList<>();
for (int i = 0; i < b.length; i++) {
queue_b.offer(b[i]);
}
int array[]=new int[a.length+b.length];
method1(a, b, array);
System.out.println();
method2(array, queue_a, queue_b);
System.out.println("\n方法三:");
int all[]=method3(a, 0, b, 0, array, 0);
for (int i : all) {
System.out.print(i+" ");
}
}
}
執行結果:
相關推薦
java 合併兩個陣列 三種解法
package datastruct.usearray; import java.util.Arrays; import java.util.LinkedList; /** * 合併兩個陣列 int a[]={0,1,5,6,7,9,14}; i
java合併兩個升序陣列為一個新的升序陣列(不使用排序演算法)
public static void main(String[] args) { int[] nums1 = {1, 3, 41, 56, 78, 89, 100, 299}; int[] nums2 = {0, 2, 30, 50, 80, 99, 111, 1
合併兩個陣列並去重(ES5和ES6兩種方式實現)
ES6實現方式 let arr1 = [1, 1, 2, 3, 6, 9, 5, 5, 4] let arr2 = [1, 2, 5, 4, 9, 7, 7, 8, 8] f
java 合併兩個byte陣列
byte[] data3 = new byte[data1.length+data2.length]; System.arraycopy(data1,0,data3,0,data1.length); System.arraycopy(data2,0,data3,data1.length,data2.
java去除兩個陣列中相同的元素
import java.util.*; /** * 陣列去重 * <p> * Created by Cheung on 2016/4/14. */ public class Test01 { public static void main(String[] args)
js合併兩個陣列生成合並後的key:value陣列
// var activeSubjectsName = ["語文", "數學", "英語", "思想品德", "科學"]; // var activeSubjectsNum = [46, 2, 2, 28, 29]; // var activeSubjectsArr = []; &nbs
Java 合併兩個list並按照某個欄位排序
public static void main(String[] args) { List<ReplyInfo> replyInfos1 = new ArrayList<>(); ReplyInfo r1 = new ReplyInfo();
LeetCode演算法21:java 合併兩個有序連結串列
問題 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4 思路 思路較為簡單,難
PHP array_combine() 通過合併兩個陣列來建立一個新陣列
array_combine() 定義:通過合併兩個陣列來建立一個新陣列,其中的一個數組元素為鍵名,另一個數組的元素為鍵值。 語法:array_combine(keys,values); 例項: <?php $name = array("張三","
delphi合併兩個陣列例子
使用delphi寫的例子,但願有人來看… {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var arr1,arr2,arr3,arr4:array of Integer; i,k,n,x
合併兩個陣列並去重
public static void main(String[] a){ String[] first = {"1","4","5","9"}; String[] second = {"6","4","5","7"}; //合併兩個陣列 String[] temp = (String[])
java 合併兩個list 並去重
上程式碼:程式碼寫得糙,但是能表達意思: public static void main(String[] args) throws Exception { List list1 =new ArrayList(); List list2 =new ArrayList();
java 合併兩個排序的連結串列
題目: Merge two sorted linked lists and return it as a new list. The new list should be made by spli
java-兩種方法求兩個陣列中重複的元素 lamdba
1、第一種普通的利用for迴圈: public static void main(String[] args) { Integer[] arr1 = { 1, 2, 5, 2, 6, 8, 9 }
合併兩個有序連結串列,合併後依然有序 --- 三種方法
1.合併連結串列p1,p2到p1上 void CombineList(ListNode** p1,ListNode* p2)//合併連結串列p1,p2 到p1 { if (*p1 == NULL) { *p1 = p2;
Java將兩個有序連結串列合併為一個有序連結串列、將兩個有序數組合併成一個有序陣列
有序連結串列合併 題目:已知兩個連結串列head1和head2各自有序,請把它們合併成一個連結串列依然有序。結果連結串列要包含head1和head2的所有節點,即使節點值相同。 分析:此題目使
演算法導論第三版第六章 合併K個有序連結串列的三種解法(最小堆法和分治遞迴法)
題目要求是將k個有序連結串列合併為一個連結串列,時間複雜度限定為O(nlogk)。下面給出應用最小堆方法的兩個程式,最後再貼上利用分治遞迴法的程式碼,雖然時間複雜度不及堆方法,但思路相對簡單好理解。 (1)最小堆方法1 用一個大小為K的最小堆(用優先佇列+自定義降序實現)(
合併兩個有序陣列Java實現
兩個已經排序的陣列A和B,A的陣列前M項有值,A的空間足夠大足夠大能容納A+B中的所有元素,將B中所有元素插入A中使合併後的陣列有序; 剛開始接觸題就想到暴力解法,先將B加入到A的後面,然後對組合後的陣列進行排序,假設A和B的長度分別是M,N,那麼用快排平均也需要nlog
leetcode 合併k個排序列表(三種解法)
題目描述 合併 k 個排序連結串列,返回合併後的排序連結串列。請分析和描述演算法的複雜度。 解法1 建立一個數組,將所有元素儲存,排序之後,再連結成一個連結串列 class Solution: def mergeKLists(self, lists):
三種不同方法將陣列分成奇數和偶數兩個陣列
//C方式編寫的函式,使用指標 #include <iostream> using namespace std; void printIntArr(const int arr[], int size) { for (int i = 0; i < si