Initially the question did not specify the desired language, and so had done only in Javascript. Now that the author specified that he wants Python, I have implementations in Python, Javascript and Java.
Python
def dividir(array):
resultado = []
nada = {}
parte = []
ultima = nada
for elemento in array:
if len(parte) > 0 and (ultima == nada or (elemento != ultima and elemento != ultima + 1)):
resultado.append(parte)
parte = []
parte.append(elemento)
ultima = elemento
if len(parte) > 0:
resultado.append(parte)
return resultado
# Teste
array = [1, 2, 2, 3, 3, 3, 6, 6, 7, 11, 12, 12, 13, 14, 14]
lista = dividir(array)
print(lista);
See here working on ideone.
Javascript
function dividir(array) {
var resultado = [];
var nada = {};
var parte = [];
var ultima = nada;
for (var idx in array) {
var elemento = array[idx];
if (parte.length > 0 && (ultima === nada || (elemento !== ultima && elemento !== ultima + 1))) {
resultado.push(parte);
parte = [];
}
parte.push(elemento);
ultima = elemento;
}
if (parte.length > 0) resultado.push(parte);
return resultado;
}
// Teste
var array = [1, 2, 2, 3, 3, 3, 6, 6, 7, 11, 12, 12, 13, 14, 14];
var lista = dividir(array);
console.log(lista);
Click on the blue "Run" button above to test.
Java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
private static List<List<Integer>> dividir(int... array) {
List<Integer> lista = IntStream.of(array).boxed().collect(Collectors.toList());
return dividir(lista);
}
private static List<List<Integer>> dividir(List<Integer> lista) {
List<List<Integer>> resultado = new ArrayList<>();
List<Integer> parte = new ArrayList<>();
Integer ultima = null;
for (Integer i : lista) {
int elemento = i;
if (!parte.isEmpty() && (ultima == null || (elemento != ultima && elemento != ultima + 1))) {
resultado.add(parte);
parte = new ArrayList<>();
}
parte.add(elemento);
ultima = elemento;
}
if (!parte.isEmpty()) resultado.add(parte);
return resultado;
}
public static void main(String[] args) {
int[] array = {1, 2, 2, 3, 3, 3, 6, 6, 7, 11, 12, 12, 13, 14, 14};
List<List<Integer>> lista = dividir(array);
System.out.println(lista);
}
}
See here working on ideone.
Friend, could you give more details? What language? What is the logic for separating the elements into sublists? You refer to
List<T>
when you say "list" or refer to aArray
?– igventurelli
If one of the answers solved your problem, could you mark it as accepted/correct by clicking on the side of the answer that contains the best solution? If you do this, your question will also be marked as solved/solved.
– Victor Stafusa