Created
December 17, 2015 15:39
-
-
Save ckob/d37b3d021dc34ac265d1 to your computer and use it in GitHub Desktop.
Comparació frequent
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.util.Random; | |
| public class Program { | |
| public static void main (String args[]) { | |
| int[] arr = rndArrInt(100000, -1000, 1000); | |
| System.out.println("------------------------------"); | |
| System.out.println("Solució frequent Alex v1: "); | |
| long startTime = System.nanoTime(); | |
| System.out.println(frequentv1(arr)); | |
| long stopTime = System.nanoTime(); | |
| long elapsedTime = stopTime - startTime; | |
| System.out.println("Temps: " + elapsedTime); | |
| System.out.println("------------------------------"); | |
| System.out.println("Solució frequent Alex v2: "); | |
| startTime = System.nanoTime(); | |
| System.out.println(frequentv2(arr)); | |
| stopTime = System.nanoTime(); | |
| elapsedTime = stopTime - startTime; | |
| System.out.println("Temps: " + elapsedTime); | |
| System.out.println("------------------------------"); | |
| System.out.println("Solució frequent Charly: "); | |
| startTime = System.nanoTime(); | |
| System.out.println(frequentCh(arr)); | |
| stopTime = System.nanoTime(); | |
| elapsedTime = stopTime - startTime; | |
| System.out.println("Temps: " + elapsedTime); | |
| } | |
| public static int[] rndArrInt (int llarg, int min, int max) { | |
| Random rand = new Random(); | |
| int[] arr = new int[llarg]; | |
| for (int i=0; i<llarg; i++) { | |
| arr[i] = rand.nextInt((max - min) + 1) + min; | |
| } | |
| return arr; | |
| } | |
| // charly : | |
| public static int frequentCh (int[] arr) { | |
| int maxFreq = arr[0]; | |
| int sumMaxFreq = 0; | |
| int sumEvaluant = 0; | |
| boolean pasar = false; | |
| for (int i=0; i<arr.length; i++) { | |
| pasar = false; | |
| for (int x=0; x<i; x++) { | |
| if (arr[i]==arr[x]){ | |
| pasar=true; | |
| break; | |
| } | |
| } | |
| if (pasar) continue; | |
| // | |
| sumEvaluant = 0; | |
| for (int x=i; x<arr.length; x++) { | |
| if (arr[i] == arr[x]) sumEvaluant++; | |
| } | |
| if (sumEvaluant>sumMaxFreq){ | |
| sumMaxFreq = sumEvaluant; | |
| maxFreq = arr[i]; | |
| } | |
| } | |
| return maxFreq; | |
| } | |
| // Alex v1: | |
| public static int frequentv1(int[] a){ | |
| int along=a.length; // Longitud de la array a | |
| int[] b= new int[along]; // Array b con la misma longitud que a | |
| for (int i=0;i<=along-1;i++) { // Empieza a recorrer la array a desde su primer numero hasta la ultima posicion | |
| int count=1; // Dependiendo de si quieres decir "Está x veces en la array(1) o está x veces repetido(0) | |
| for (int i2=i+1;i2<=along-1;i2++) { // Empieza a recorrer la primera array de nuevo desde i hasta el final menos 1 | |
| if (a[i]==a[i2]) count++; // Si encuentra un numero que coincida con el numero [i], suma 1 al contador | |
| } | |
| b[i]=count; // Declaramos el valor de la segunda array en la misma posición: En la posicion 0 de la primera: Numero, en la posicion 0 de la segunda: Número de veces que se repite el numero hasta el final | |
| } | |
| int max = findMaxValue(b); // Encuentra el valor máximo de la array b (máximo de repeticiones) | |
| for (int i=0;i<=b.length-1;i++) { // Empezamos a recorrer la segunda array | |
| if (b[i]==max) { // En el momento que encuentra la casilla donde está | |
| for (int i2=i+1;i2<=b.length-1;i2++) { // La empieza a recorrer de nuevo desde donde la ha encontrado | |
| if (b[i]==b[i2]) { // Si encuentra de nuevo el valor | |
| if (a[i]<a[i2]) System.out.println("Índex: "+a[i]+", amb "+max+" repeticions"); // Compara el índice de la primera array (recordamos que están en la misma posición) | |
| else System.out.println("Índex: "+a[i2]+", amb "+max+" repeticions"); // Nos devuelve el más pequeño | |
| break; | |
| } | |
| else { | |
| System.out.println("Repeticions: "+max+", índex: "+a[i]); // Si no, nos devuelve simplemente el índice | |
| break; | |
| } | |
| } | |
| break; | |
| } | |
| } | |
| return max; | |
| } | |
| public static int findMaxValue(int a[]) { | |
| int max=0; | |
| for (int i=0;i<=a.length-1;i++) { | |
| if (a[i]>max) { | |
| max=a[i]; | |
| } | |
| } | |
| return max; | |
| } | |
| // Alex v2: | |
| public static int[] bubbleSort (int[] a) { | |
| int aux,i,j,longitud=a.length; | |
| for (i=0;i<=longitud-1;i++) { | |
| for (j=0;j<=longitud-i-2;j++) { | |
| if (a[j]>a[j+1]) { | |
| aux=a[j+1]; | |
| a[j+1]=a[j]; | |
| a[j]=aux; | |
| } | |
| } | |
| } | |
| return a; | |
| } | |
| /* public static int findMaxValue(int a[]) { | |
| int max=0; | |
| for (int i=0;i<=a.length-1;i++) { | |
| if (a[i]>max) { | |
| max=a[i]; | |
| } | |
| } | |
| return max; | |
| } */ | |
| public static int frequentv2(int[] a){ | |
| bubbleSort(a); | |
| int along = a.length; | |
| int count=0; | |
| int posb=0; | |
| int[] b = new int[along]; | |
| int[] c = new int[along]; | |
| int count2=0; | |
| for (int i=0;i<=along-2;i++) { | |
| if (a[i]==a[i+1]) { | |
| count2++; | |
| } | |
| else { | |
| b[posb]=a[i]; | |
| c[posb]=count2; | |
| posb++; | |
| count2=0; | |
| } | |
| } | |
| int max=findMaxValue(c); | |
| for (int i=0;i<=along-1;i++) { | |
| if (c[i]==max) { | |
| for (int i2=i+1;i2<=along-1;i2++) { | |
| if (max==c[i2]) { | |
| if (a[i]<a[i2]) { | |
| System.out.println("Índex: "+b[i]+", nº de repeticions: "+max); | |
| break; | |
| } | |
| else { | |
| System.out.println("Índex: "+b[i2]+", nº de repeticions: "+max); | |
| break; | |
| } | |
| } | |
| else { | |
| System.out.println("Índex: "+b[i]+", nº de repeticions: "+max); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| return max; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment