La matriz se divide en tres partes iguales y explicaciones

Este tema es un tema relativamente simple, blogger de cepillo leetcode por encima de los problemas encontrados, por lo que este disco un poco, con la esperanza de ayudar a los estudiantes en cuestión.

En primer lugar quiero hablar acerca de las ideas:

1. array Suponiendo tiene n elementos, el elemento de suma cuando este n no es 0 mod 3 indica que la matriz no es necesariamente igualmente dividido por tres.

2. Utilizamos todos los elementos y divididos por 3 para obtener la media

3. izquierdo indica el comienzo de la matriz, parte derecha indica el final de la matriz, y la matriz representa una parte izquierda y una left_sum, porción right_sum y una matriz derecha representa un valor de ajuste que indica si un left_sum bool y right_sum iguales, y el valor predeterminado es falso

4. Cuando el puntero es menor que la mano derecha a la izquierda, seguimos iteraciones, y cada iteración de los extremos izquierdo y derecho de la valor de acumulación y la left_sum right_sum anteriormente, hasta que los dos son iguales, y igual a la media, a continuación, nos fijamos el valor bool predefinido es cierto y salir del bucle

5. Después de ciclo se ha determinado si la izquierda y la derecha entre la al menos una espaciales y garantizar la igualdad de valor y la tercera left_sum right_sum, si indica que la matriz puede ser de tres iguales, si no, la matriz no puede ser tres porciones iguales.

Bueno, la idea general del algoritmo es el caso, voy a poner el código de abajo, vale la pena señalar que el vector <int> v = {1,2,3,4,5} Tal declaración sólo puede funcionar correctamente después de c ++ 11 espero que prestar atención.

1  #include <iostream>
 2 #include <numérico>
 3 #include <stdio.h>
 4 #include <vector>
 5  usando  espacio de nombres std;
6  
7  clase Solución
 8  {
 9  pública :
 10      bool canThreePartsEqualSum (vector < int > & A)
 11      {
 12          int suma = acumulan (A.begin (), A.end (), 0 ); // 求和
13          si (suma% 3 ! = 0 )
 14              de retorno en false ;                    // a tres modulo la matriz no puede ser igual a 0 trisecado 
15          int AVG = SUM / 3. ;                   // obtener Mean 
16          int izquierda = 0 , derecha = a.size () - 1. ; // conseguir alrededor puntero 
. 17          int left_sum = 0 , right_sum = 0 ;     // blanco initialize e izquierda 
18 es          BOOL en Flag = false ;                   // determinar si la izquierda y derecha y puede calcularse iguales entre sí 
19.          el tiempo (izquierda < derecha)
 20 es          { //Cuando el puntero es inferior a la izquierda a la derecha sigue bucle 
21 es              SI (Left_sum =! AVG)
 22 es              { // si la media es inferior a la izquierda, derecha acumulativo 
23 es                  left_sum + = A.at (de izquierda ++ );
 24              }
 25              IF (right_sum =! AVG)
 26 es              { // si la media es menor que la derecha y la izquierda acumulativo 
27                  right_sum A.at + = (derecha - );
 28              }
 29              IF (left_sum && right_sum == == AVG AVG)
 30              { // si y aproximadamente igual a la media, fuera del bucle 
31 es                  en Flag =true ;
 32                  PAUSA ;
 33 es              }
 34 es          }
 35          de retorno En Flag && derecho - izquierdo> . 1 ; // cuando el puntero intermedia izquierda y derecha y la izquierda es igual a un mínimo de espacio, la matriz puede ser representado trisección 
36      }
 37 [  };
 38 es  int principal ( void ) {
 39      Solución * = s nuevo nuevo Solution ();
 40      Vector < int > V = { . 3 , . 3 , . 6 , . 5 , - 2 , 2 , . 5 , . 1 , -. 9 , . 4 };
 41 es      BOOL resultado = S-> canThreePartsEqualSum (V);
 42 es      COUT << " la matriz " << (Resultado? " Can " : " no " ) << " se trisected " << endl;
 43 }

Bueno, lo anterior es el contenido del ensayo, el código fuente puede ser descargado desde (https://github.com/maoqifan1/leetcode.git) mi github, nos vemos la próxima vez.

Supongo que te gusta

Origin www.cnblogs.com/maoqifansBlog/p/12481864.html
Recomendado
Clasificación