华为OJ平台——整形数组合并
题目描述:
将两个整型数组按照升序合并,并且过滤掉重复数组元素
输入:
输入说明,按下列顺序输入:
1 输入第一个数组的个数
2 输入第一个数组的数值
3 输入第二个数组的个数
4 输入第二个数组的数值
输出:
输出合并之后的数组
输入样例:
3 1 2 5 4 -1 0 3 2
输出样例:
-101235
思路:
先将两个数组合并到一个中,然后对这个完整的数组进行排序,最后剔除重复的数据并输出
1 import java.util.Scanner; 2 3 public class ArrayMerge { 4 5 public static void main(String[] args) { 6 //输入,按输入的标准输入两个数组的数据 7 Scanner cin = new Scanner(System.in) ; 8 int len1 = cin.nextInt() ; 9 if(len1 < 1){ 10 System.exit(-1); 11 } 12 int [] arr1 = new int [len1] ; 13 for(int i = 0 ; i < len1 ; i++){ 14 arr1[i] = cin.nextInt() ; 15 } 16 int len2 = cin.nextInt() ; 17 if(len2 < 1){ 18 System.exit(-1); 19 } 20 int [] arr2 = new int [len2] ; 21 for(int i = 0 ; i < len2 ; i++){ 22 arr2[i] = cin.nextInt() ; 23 } 24 cin.close() ; 25 26 System.out.print(intArrayMergeASC(arr1,arr2)) ; 27 } 28 29 /** 30 * 进行合并,然后将输出结果存放到一个字符串中返回 31 * @param arr1 32 * @param arr2 33 * @return 34 */ 35 private static String intArrayMergeASC(int[] arr1, int[] arr2) { 36 //将两个数组合并到一个较大的数组中 37 int [] total = new int [arr1.length + arr2.length] ; 38 for(int i = 0 ; i < arr1.length ; i++){ 39 total[i] = arr1[i] ; 40 } 41 for(int i = 0 ; i < arr2.length ; i++){ 42 total[i+arr1.length] = arr2[i] ; 43 } 44 //对合并后的数组排序 45 sort(total) ; 46 //保存在结果在字符串中 47 String res = total[0]+"" ; 48 int last = total[0] ; 49 for(int i = 1 ; i < total.length ; i++){ 50 //不相同的则添加到字符串中,相同的则直接下一个 51 if(total[i] != last){ 52 last = total[i] ; 53 res += total[i] + "" ; 54 } 55 } 56 57 return res; 58 59 } 60 61 /** 62 * 简单选择排序算法对数组进行排序 63 * @param arr 64 */ 65 private static void sort(int[] arr) { 66 int min ; 67 int index ; 68 for(int i = 0 ; i < arr.length-1 ; i++){ 69 min = arr[i] ; 70 index = i ; 71 for(int j = i+1 ; j < arr.length ; j++){ 72 if(min > arr[j]){ 73 min = arr[j] ; 74 index = j ; 75 } 76 } 77 if(index != i){ 78 arr[index] = arr[i] ; 79 arr[i] = min ; 80 } 81 } 82 } 83 84 }