Java - AYUDA!! Inversiones de 1

 
Vista:
Imágen de perfil de Diana Sanchez

AYUDA!! Inversiones de 1

Publicado por Diana Sanchez (1 intervención) el 05/07/2022 08:42:12
Buenas, tengo un problema con un código que estoy realizando en el que se me pide que haga las inversiones de un numero presente en una lista en una lista (El numero 1). De forma mas explicativa es que si se pide buscar las inversiones de 1 o de X, son del número "1" o del número "X" y el algoritmo tendrá que funcionar siempre igual, pero contando sólo el número de inversiones que se le realizan a dicho número. El algoritmo debe utilizar el método divide y vencerás.
Contar inversiones me refiero donde ai y aj estén en diferentes mitades y devolver la suma de las cantidades.
El código que he realizado me devuelve un resultado pero se que no es el correcto.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public class inversiones {
 /**
  * The main method.
  *
  * @param args the arguments
  * @throws IOException Signals that an I/O exception has occurred.
  */
 
 public static void main(String[] args) throws IOException {
  Scanner leer = new Scanner(new File("C:\\\\Users\\\\Downloads\\\\InversionOf1.dat"));
  int nCases = leer.nextInt();
 
  double a[] = new double[nCases];
  for(int i=0; i<nCases; i++) {
   a[i]= leer.nextInt();
  }
 
  System.out.println("El número de inversiones que tiene el array dado es: " +ordenar(a, 0, a.length-1));
 }
 /**
  * Merge. Método valido para ordenar el array.
  *
  * @param a2 array que queremos ordenar
  * @param a numero de la izquierda
  * @param middle la mitad entre el límite inferior y superior
  * @param b numero de la derecha
  * @return el número de inversiones acontecidas durante el recorrido del método
  */
 private static int merge (double[] a2, int a, int middle, int b) {
  int cont=0;
  int i=0, j=0, k=a;
 
  double[] left = Arrays.copyOfRange(a2, a, middle+1);
  double [] right = Arrays.copyOfRange(a2, middle+1, b+1);
 
  /*Comparar antes del contador si el elemento que tenemos que sumar es uno o no,
  Si es uno que sume y si no que no sume*/
  while(i<left.length && j<right.length) {
   if(left[i] <= right[j]) {
    a2[k++]=left[i++];
    i++;
   }else {
    a2[k++]=right[j++];
    if(a2[k++] == 1){
     cont += (middle+1)-(a+j);
     //cont++;
    }
    //cont += (middle+1)-(a+i);
    j++;
   }
   a++;
  }
 
  while(i<left.length) {
   a2[k++] = left[i++];
  }
     while (j < right.length) {
         a2[k++] = right[j++];
  }
  return cont;
 }
 
 
 /**
  * Método para ordenar el array, recursivo. Parecido a MergeSort.
  *
  * @param a2 array a ordenar
  * @param min, limite inferior del array que queremos ordenar
  * @param max, limite superior del array que queremos ordenar
  * @return numero de inversiones necesarias para ordenar el array
  */
 private static int ordenar(double[] a2, int min, int max) {
  int cont=0;
  int middle = (min+max)/2;
  if(min<max) {
   cont = ordenar (a2, min, middle); //ordenar la izquierda
   cont = cont + ordenar (a2, middle + 1, max); //ordenar la derecha
   cont = cont + merge (a2, min, middle, max);
  }
  return cont;
 }
 
 
}


No entiendo que es lo que podría estar mal. También adjunto una pequeña lista de numero como ejemplo de los datos donde hay que buscar las inversiones de 1:

35
7
20
8
3
1
6
24
12
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