Получение всех непрерывных подмассивов из заданного массива целых чисел

#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]]