From 211f2809ab913e1fc636db3bc1ca8936263b8c20 Mon Sep 17 00:00:00 2001 From: Hipple <1159828430@qq.com> Date: Sun, 5 Mar 2017 22:14:34 +0800 Subject: [PATCH] update Merge --- .../src/com/coding/array/ArrayUtil.java | 66 +++++++------------ .../src/com/coding/array/ArrayUtilTest.java | 3 +- 2 files changed, 27 insertions(+), 42 deletions(-) diff --git a/group18/1159828430/20170226/src/com/coding/array/ArrayUtil.java b/group18/1159828430/20170226/src/com/coding/array/ArrayUtil.java index 3440cbbb71..c634a3a0b6 100644 --- a/group18/1159828430/20170226/src/com/coding/array/ArrayUtil.java +++ b/group18/1159828430/20170226/src/com/coding/array/ArrayUtil.java @@ -65,49 +65,33 @@ public static int[] removeZero(int[] oldArray){ */ public static int[] merge(int[] array1, int[] array2){ - int[] newArray= new int[array1.length + array2.length]; - System.arraycopy(array1, 0, newArray, 0, array1.length); - System.arraycopy(array2, 0, newArray, array1.length, array2.length); - - //Arrays.sort(newArray);//快速排序 - - //冒泡排序 - /*for(int i=0;i newArray[j]){ - int temp = newArray[i]; - newArray[i] = newArray[j]; - newArray[j] = temp; - } - } - }*/ - - //选择排序 - /*for (int i = 0; i < newArray.length - 1; i++) { - int min = i; - for (int j = i + 1; j < newArray.length; j++) { - if (newArray[min] > newArray[j]) { - min = j; - } - } - if (min != i) { - int temp = newArray[i]; - newArray[i] = newArray[min]; - newArray[min] = temp; - } - }*/ - - //插入排序 - for (int i = 1; i < newArray.length; i++) { - for (int j = i; j > 0; j--) { - if (newArray[j] < newArray[j - 1]) { - int temp = newArray[j - 1]; - newArray[j - 1] = newArray[j]; - newArray[j] = temp; - } else - break; + int lena = array1.length; + int lenb = array2.length; + int[] newArray = new int[lena + lenb]; + int i = 0, j = 0, k = 0;// 分别代表数组a ,b , c 的索引 + + while (i < array1.length && j < array2.length) + if (array1[i] <= array2[j]) { + if (k == 0 || newArray[k - 1] != array1[i]) // 去重复 + newArray[k++] = array1[i]; + i++; + } else { + if (k == 0 || newArray[k - 1] != array2[j]) // 去重复 + newArray[k++] = array2[j]; + j++; } + + while (i < array1.length) { + if (k == 0 || newArray[k - 1] != array1[i]) // 去重复 + newArray[k++] = array1[i]; + i++; + } + while (j < array2.length) { + if (k == 0 || newArray[k - 1] != array2[j]) // 去重复 + newArray[k++] = array2[j]; + j++; } + newArray = removeZero(newArray); return newArray; } /** diff --git a/group18/1159828430/20170226/src/com/coding/array/ArrayUtilTest.java b/group18/1159828430/20170226/src/com/coding/array/ArrayUtilTest.java index a07658d0ca..575c02540c 100644 --- a/group18/1159828430/20170226/src/com/coding/array/ArrayUtilTest.java +++ b/group18/1159828430/20170226/src/com/coding/array/ArrayUtilTest.java @@ -37,7 +37,8 @@ public void testMerge() { int[] a1 = {3,5,7,8}; int[] a2 = {4, 5, 6,7}; int[] newArr = ArrayUtil.merge(a1, a2); - Arrays.stream(newArr).forEach(i -> System.out.println(i)); + int[] resultArr = {3,4,5,6,7,8}; + assertArrayEquals(resultArr, newArr); } @Test