Skip to content

Instantly share code, notes, and snippets.

@ckob
Created December 17, 2015 15:39
Show Gist options
  • Select an option

  • Save ckob/d37b3d021dc34ac265d1 to your computer and use it in GitHub Desktop.

Select an option

Save ckob/d37b3d021dc34ac265d1 to your computer and use it in GitHub Desktop.
Comparació frequent
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