Zuo Chengyun-Clase de nivel completo sobre algoritmo y estructura de datos


  1. Solución de árbol binario inverso : utilice la recursividad; subárbol inverso izquierdo, subárbol inverso derecho, intercambio de subárboles izquierdo y derecho

2.
Solución de lista revertida enlazada individualmente :

Solución recursiva:
Java
public ListNode reverseList (ListNode head) { if (head == null || head.next == null) { return head; } ListNode p = head.next; ListNode q = reverseList§; head.next = null ; p.next = head; return q; } 2. Método de inserción de encabezado public ListNode reverseList (ListNode head) { if (head == null || head.next == null) { return head; } ListNode p = head.next ; head.next = null; // Note esta oración ListNode q; while (p! = null) { q = p.next; p.next = head; head = p; p = q; } return head; } 3. Implementar una cola a través de dos pilas










java
















Solución: una pila es responsable de cargar y la pila B es responsable de sacar. Si no hay elementos en la pila B durante la operación de búsqueda, todos los elementos de la pila A se recuperan y se introducen en la pila B.

  1. Preguntas de la prueba escrita Tencent2013:
    Tema: Utilice los seis números 1, 2, 2, 3, 4 y 5 para escribir una función principal en Java e imprima todos los arreglos diferentes, tales como: 512234, 412345, etc., requisitos: "4" no puede ser En tercer lugar, "3" y "5" no se pueden conectar.
    Análisis: la idea intuitiva de esta pregunta es organizar las 6 matrices y luego eliminar los resultados no calificados. En cuanto al algoritmo de implementación de permutación completa, puedes consultar este enlace de permutación completa (incluidas soluciones recursivas y no recursivas), aquí damos otras dos ideas.
    Solución 1: Forme 6 nodos en gráficos no dirigidos con 3 y 5 desconectados, y atraviese el gráfico con cada nodo como nodo inicial. El resultado se deduplica (puede considerar almacenar directamente el resultado transversal en la estructura establecida) y luego ir al "4" en el tercer lugar.
    Java
    public class Tencent2013 { private String [] b = new String [] {"1", "2", "2", "3", "4", "5"}; private int n = b.length; privado booleano [] visitado = nuevo booleano [n]; privado int [] [] a = nuevo int [n] [n]; resultado de cadena privada = “”; conjunto de TreeSet privado = nuevo TreeSet (); privado void run () { // Construye el gráfico para (int i = 0; i <n; i ++) { for (int j = 0; j <n; j ++) {









    si (i == j) { a [i] [j] = 0; } más { a [i] [j] = 1; } } } // 3 es el 4º num, 5 es el 6º num. no puede ser vecino a [3] [5] = 0; a [5] [3] = 0; for (int i = 0; i <n; i ++) { depthFirstSearch (i); } // for (String str: set) { if (str.indexOf (“4”)! = 2) { System.out.println (str); } } } // 深度 优先 遍历 graficar profundidad de vacío privada búsqueda (int i) { visitado [i] = verdadero; resultado + = b [i]; if (result.length () == n) { set.add (result); } para (int j = 0; j <n; j ++) {



























    if (a [i] [j] == 1 && visitado [j] == falso) { deepFirstSearch (j); } } resultado = resultado.substring (0, resultado.longitud () - 1); visitado [i] = falso; } public static void main (String [] args) { new Tencent2013 (). run (); } }









Solución 2 : (Ideas amplias)
El rendimiento del algoritmo es relativamente pobre. Si hay n números, el número de ciclos es 10 hasta el nivel de potencia n. Si n es relativamente grande, este método no debe usarse para resolver el problema. Aquí se presenta como una idea novedosa.
Java
// Código Java
para (int i = 122345; i <= 543221; i ++) { String sb = String.valueOf (i); String temp = sb.replaceFirst ("1", "a"); temp = temp.replaceFirst ("2", "a"); temp = temp.replaceFirst ("2", "a"); temp = temp.replaceFirst ("3", "a"); temp = temp.replaceFirst ("4", "A"); temp = temp.replaceFirst ("5", "a"); if (! "Aaaaaa" .equals (temp)) continue; // Excluir 4 en tercer lugar if (sb.indexOf ("4 ”) == 2) continuar; // 3 y 5 están juntos if (sb.indexOf (“ 35 ”)> -1 || sb.indexOf (“ 53 ”)> -1) continue; System.out.println ( i); } 5. Gire la cuerda















Dada una cadena, es necesario mover varios caracteres delante de la cadena hasta el final de la cadena. Por ejemplo, mueva los dos caracteres 'a' y'b 'delante de la cadena "abcdef" hasta el final de la cadena para hacer el original La cadena se convierte en la cadena "cdefab". Escriba una función para completar esta función, requiriendo que la complejidad temporal de la operación de cadena con longitud n sea O (n) y la complejidad espacial sea O (1).
Solución: método de inversión de tres pasos:

Invertir la parte a rotar Invertir
la parte restante Invertir
toda la cadena
Java
public String reverse (String s) { StringBuilder builder = new StringBuilder (s); builder = builder.reverse (); return builder.toString (); } public String moveToTail (String s, int n) { String s1 = this.reverse (s.substring (0, n)); String s2 = this.reverse (s.substring (n)); devuelve this.reverse (s1 + s2); }








Supongo que te gusta

Origin blog.csdn.net/weixin_52772147/article/details/112298170
Recomendado
Clasificación