1. 程式人生 > >java 合併兩個陣列 三種解法

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