Java - ayuda con arrays

 
Vista:
sin imagen de perfil

ayuda con arrays

Publicado por giant (1 intervención) el 22/09/2016 18:34:15
Buenas estoy implementando un metodo compactar que compacta los elementos
consecutivos iguales a una unica aparicion.
ejemplo : compactar({2,2,1,2}) ---{2,1,2}
Esto es lo que he conseguido hacer hasta el momento y no se como hacer que sean consecutivos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Arrays;
 
public class test {
 
	private static int[] removeDupes(int[] array) {
		if (array == null) {
			throw new IllegalArgumentException();
		}
	    int end = array.length - 1;
	    for (int i = 0; i <= end; i++) {
	        for (int j = i + 1; j <= end; j++) {
	            if (array[i] == array[j]) {
	                while (end >= j && array[j] == array[end]) {
	                    end--;
	                }
	                if (end > j) {
	                    array[j] = array[end];
	                    end--;
	                }
	            }
	        }
	    }
 
	    return Arrays.copyOf(array, end + 1);
	}
 
	    public static void main(final String[] args) {
	        System.out.println(Arrays.toString(removeDupes(new int[] { 3, 45, 1, 2, 4,3, 3, 3, 3, 2, 1, 45, 2, 10 })));  //sale 3,45,1,2,4,10 en vez de 3,45,1,2,4,3,2,1,45,2,10
	        System.out.println(Arrays.toString(removeDupes(new int[] { 2, 2, 3, 3 })));
	        System.out.println(Arrays.toString(removeDupes(new int[] { 1, 1, 1, 1, 1, 1, 1, 1 })));
	        System.out.println(Arrays.toString(removeDupes(new int[] {})));
	        System.out.println(Arrays.toString(removeDupes(new int[] {1})));
	    }
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con arrays

Publicado por YYanes (144 intervenciones) el 22/09/2016 22:20:45
Amigo, pruebe esta solución:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static int[] removeDupes(int[] array) {
        int max = array.length-1;
        int[] array2 = array;
 
        int pos = 0;
        if(max>0)
        {
          for(int i=0;i<max; i++)
          {
            if(array2[pos]!=array[i]){
                pos++;
                array2[pos] = array[i];
              }
          }
           for(int i=pos+1;i<=max;i++)
             array2[i]=0;
        }
}

El único problema es que el array resultante (array2) tiene una longitud constante, por lo que sus últimos valores aparecerán en cero. Ejecútalo e imprímelo para que veas de qué te hablo.
Un GigaSaludo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alain
Val: 22
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

ayuda con arrays

Publicado por Alain (8 intervenciones) el 22/09/2016 23:19:01
Hola prueba con este código. Creo que te sirve para lo que quieres y elimina el problema de los ceros al final. Saludos!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String[] args) {
	// TODO Auto-generated method stub
	int [] a ={2,2,4,2,2,1,1,3,3,5};
	int [] b = new int [a.length];
	int count = Compact(a, b);
	for(int i = 0;i < count;i++)
		System.out.println(b[i]);
 
}
 
public static int Compact(int [] entry_array, int [] result_array){
	int length = entry_array.length;
	int pos = 0;
	for(int i= 0; i < length - 1; i++){
		if(entry_array[i] == entry_array[i+1]){
			continue;
		}
		else
			result_array[pos++] = entry_array[i];
	}
	if(length > 0)
		result_array[pos++] = entry_array[length -1]; //add the last item
   return pos;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar