2015-07-06 2 views
0

Я хочу написать программу java для объединения двух массивов в третьем массиве. Также сортируйте третий массив в порядке возрастания. Но дублирование цифры не допускается. Могу ли я написать эту программу. Это то, что я сделал до сих пор ..Слияние двух массивов в третьем массиве также сортирует третий массив в порядке возрастания

public class combine { 
    public static void main(String[]args){ 

    int[]a = {1, 2, 3}; 
    int[]b = {4, 5, 6}; 
// int[]c = new int[10]; 
    int[]c = new int[a.length+b.length]; 
    int i; 
    for(i=0; i<a.length; i++) 
    c[i] = a[i]; 

    for(int j=0; j<b.length; j++) 
     c[i++]=b[j]; 

    for(int k=0; k<c.length; k++) 
    System.out.print(c[k]+" "); 
} 

} 
+2

вы могли бы использовать язык Java –

+2

, что вы пробовали до сих пор .. ?? –

+0

Дублирование цифр или цифр? – Aderis

ответ

0

Вы можете добавить все числа (или цифр) в обоих массивах к TreeSet, а затем просто продолжать называть mySet.first() и добавить его в массив результатов, затем mySet.remove(mySet.first()), пока набор не будет пустым. Поскольку это TreeSet, многократное получение и удаление первого (ака самого низкого) элемента в наборе даст восходящий порядок.

Еще одна вещь, которую вы могли бы сделать, это отсортировать оба массива, а затем использовать раунд сортировки слияния для объединения массивов с проверкой где, если ранее вставленный номер равен числу, которое нужно вставить, ничего не делайте и пропустите номер.

2

Сначала создайте массивы:

Integer[] a = new Integer[]{8, 7, 6, 5, 4, 3, 2, 1, 0}; 
Integer[] b = new Integer[]{0, 1, 1, 2, 3, 5, 8, 13, 21}; 

Преобразование массивов в списки для простой обработки:

List<Integer> aList = new ArrayList<>(Arrays.asList(a)); 
List<Integer> bList = Arrays.asList(b); 

Объединение списков:

aList.addAll(bList); 

отсортировать список в порядке возрастания:

aList.sort(new Comparator<Integer>() { 
    @Override 
    public int compare(Integer integer, Integer t1) { 
     return integer.compareTo(t1); 
    } 
}); 

Преобразование списка в набор (наборы не имеют повторяющиеся значения по определению):

Set<Integer> uniqueList = new HashSet<>(aList); 

Печать объединенный, отсортированный массив без повторяющихся значений:

System.out.println(uniqueList); 

Reuslt:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 21] 
0

Вы можете объединить a и b в массиве temp, а затем использовать Arrays.sort (temp); и выполните линейный поиск в temp, чтобы скопировать только уникальные записи в c

1

Попробуйте следующий код, добавив значения в обоих массивах, чтобы установить удаление дубликатов, и с помощью набора деревьев вы можете получить заказ, а затем заполнить любые ds как вы хотите

public static void main(String args[]) { 
    Set<Integer> mySet = new TreeSet<Integer>(); 
    int[] a = { 1, 2, 3, 4 }; 
    int[] b = { 3, 5, 4, 6 }; 
    for (int i : a) { 
     mySet.add(i); 
    } 
    for (int i : b) { 
     mySet.add(i); 
    } 
    System.out.println(mySet); 
} 

Выход: [1, 2, 3, 4, 5, 6]

+0

Хорошее решение! Я еще не знал TreeSets. Более короткий способ добавления - использовать массивы Integer (вместо int) и использовать 'mySet.addAll (Arrays.asList (a));' или 'Collections.addAll (mySet, a);' instad цикла. – jschlichtholz

0

вы можете использовать TreeSet, которая одновременно сортируют и без дублированных значений. Вот пример того, что:

Integer[] numbers1 = { 7, 7, 8, 9, 10, 8, 8, 9, 6, 5, 4 }; 
Integer[] numbers2 = { 12, 7, 4, 6, 10, 8, 2, 9, 5, 5, 3 }; 

List<Integer> list1 = Arrays.asList(numbers1); 
List<Integer> list2 = Arrays.asList(numbers2); 

Set<Integer> set = new TreeSet<Integer>(list1); 
set.addAll(new TreeSet<Integer>(list2)); 

System.out.println(set.toString()); 

Здесь работает ideone.

Результат: [2, 3, 4, 5, 6, 7, 8, 9, 10, 12]

Примечание: Если вы не можете использовать Integer[] но только int[] вам придется конвертировать те первые. Для StakeOverflow существует несколько вопросов для этого здесь.

Смежные вопросы