#java #arrays
Вопрос:
Я хочу найти все подмассивы из заданного массива целых чисел. Я использовал хэш-набор ArrayList для хранения всех непрерывных комбинаций. Но этот хэш-набор неправильно хранит элементы массива и пропускает некоторые элементы массива. Кроме того, хэш-набор хранит повторяющиеся элементы массива.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class SubArrays {
public static int possibleSubArrays(int[] aray) {
Set<ArrayList<Integer>> uniqueSubArrays= new HashSet<ArrayList<Integer>>();
for (int i = 0; i < aray.length; i ) {
ArrayList<Integer> subArrays = new ArrayList<Integer>();
for (int j = i; j < aray.length; j ) {
subArrays.add(aray[j]);
System.out.println("Creating Sub-Array: " subArrays);
uniqueSubArrays.add(subArrays);
System.out.println("Entering elements in Set of array: " uniqueSubArrays);
}
}
System.out.println("Array of sub-arrays:" uniqueSubArrays);
return uniqueSubArrays.size();
}
public static void main(String[] args) {
int[] array = { 1, 2, 3, 4 };
int size = possibleSubArrays(array);
System.out.println("Size of Unique Sub arrays is: " size);
}
}
Ответ №1:
Это не то, как мы генерируем sub-arrays
массив. Нам нужны три вложенных цикла для генерации всех вложенных массивов. Первые два цикла для получения начального и конечного индекса вложенных массивов. И третье-добавить в список все элементы определенного подмассива subArrays
. И в конце каждой j
итерации нам нужно добавить этот subArrays
список в uniqueSubArrays
набор.
for (int i = 0; i < aray.length; i )
{
for (int j = i; j < aray.length; j )
{
ArrayList<Integer> subArrays = new ArrayList<Integer>();
for (int k = i; k <= j; k )
{
subArrays.add(aray[k]);
uniqueSubArrays.add(subArrays);
}
System.out.println(uniqueSubArrays);
}
}
Для массива: [1,2,3,4]
Под-массивы:
[[1], [1, 2, 3], [2], [1, 2], [2, 3], [2, 3, 4], [3], [3, 4], [4], [1, 2, 3, 4]]